aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitry Ivanov <dimitry@google.com>2015-10-23 20:53:38 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-10-23 20:53:38 +0000
commitadd683d5f374b40576458fa386c7d75369014e11 (patch)
tree1519a54afeeaa1eaf6efd655231073adec804bc5
parent85558f701ee6f155f98c80b64fd46d9589db4c5f (diff)
parent667e84bb0b221c9cedf149e4fde14fcd576a37c2 (diff)
downloadvalgrind-nougat-mr1-release.tar.gz
Merge changes I3d6f4dd4,I8b538cc8,Id7ba841dandroid-wear-n-preview-3android-wear-n-preview-2android-wear-n-preview-1android-wear-7.1.1_r1android-n-preview-5android-n-preview-4android-n-preview-3android-n-preview-2android-n-preview-1android-n-mr2-preview-2android-n-mr2-preview-1android-n-mr1-preview-2android-n-mr1-preview-1android-n-iot-release-smart-display-r2android-n-iot-release-smart-displayandroid-n-iot-release-polk-at1android-n-iot-release-lg-thinq-wk7android-n-iot-release-ihome-igv1android-n-iot-preview-4android-n-iot-preview-2android-cts_7.1_r1android-cts-7.1_r9android-cts-7.1_r8android-cts-7.1_r7android-cts-7.1_r6android-cts-7.1_r5android-cts-7.1_r4android-cts-7.1_r3android-cts-7.1_r29android-cts-7.1_r28android-cts-7.1_r27android-cts-7.1_r26android-cts-7.1_r25android-cts-7.1_r24android-cts-7.1_r23android-cts-7.1_r22android-cts-7.1_r21android-cts-7.1_r20android-cts-7.1_r2android-cts-7.1_r19android-cts-7.1_r18android-cts-7.1_r17android-cts-7.1_r16android-cts-7.1_r15android-cts-7.1_r14android-cts-7.1_r13android-cts-7.1_r12android-cts-7.1_r11android-cts-7.1_r10android-cts-7.1_r1android-cts-7.0_r9android-cts-7.0_r8android-cts-7.0_r7android-cts-7.0_r6android-cts-7.0_r5android-cts-7.0_r4android-cts-7.0_r33android-cts-7.0_r32android-cts-7.0_r31android-cts-7.0_r30android-cts-7.0_r3android-cts-7.0_r29android-cts-7.0_r28android-cts-7.0_r27android-cts-7.0_r26android-cts-7.0_r25android-cts-7.0_r24android-cts-7.0_r23android-cts-7.0_r22android-cts-7.0_r21android-cts-7.0_r20android-cts-7.0_r2android-cts-7.0_r19android-cts-7.0_r18android-cts-7.0_r17android-cts-7.0_r16android-cts-7.0_r15android-cts-7.0_r14android-cts-7.0_r13android-cts-7.0_r12android-cts-7.0_r11android-cts-7.0_r10android-cts-7.0_r1android-7.1.2_r9android-7.1.2_r8android-7.1.2_r6android-7.1.2_r5android-7.1.2_r4android-7.1.2_r39android-7.1.2_r38android-7.1.2_r37android-7.1.2_r36android-7.1.2_r33android-7.1.2_r32android-7.1.2_r30android-7.1.2_r3android-7.1.2_r29android-7.1.2_r28android-7.1.2_r27android-7.1.2_r25android-7.1.2_r24android-7.1.2_r23android-7.1.2_r2android-7.1.2_r19android-7.1.2_r18android-7.1.2_r17android-7.1.2_r16android-7.1.2_r15android-7.1.2_r14android-7.1.2_r13android-7.1.2_r12android-7.1.2_r11android-7.1.2_r10android-7.1.2_r1android-7.1.1_r9android-7.1.1_r8android-7.1.1_r7android-7.1.1_r61android-7.1.1_r60android-7.1.1_r6android-7.1.1_r59android-7.1.1_r58android-7.1.1_r57android-7.1.1_r56android-7.1.1_r55android-7.1.1_r54android-7.1.1_r53android-7.1.1_r52android-7.1.1_r51android-7.1.1_r50android-7.1.1_r49android-7.1.1_r48android-7.1.1_r47android-7.1.1_r46android-7.1.1_r45android-7.1.1_r44android-7.1.1_r43android-7.1.1_r42android-7.1.1_r41android-7.1.1_r40android-7.1.1_r4android-7.1.1_r39android-7.1.1_r38android-7.1.1_r35android-7.1.1_r33android-7.1.1_r32android-7.1.1_r31android-7.1.1_r3android-7.1.1_r28android-7.1.1_r27android-7.1.1_r26android-7.1.1_r25android-7.1.1_r24android-7.1.1_r23android-7.1.1_r22android-7.1.1_r21android-7.1.1_r20android-7.1.1_r2android-7.1.1_r17android-7.1.1_r16android-7.1.1_r15android-7.1.1_r14android-7.1.1_r13android-7.1.1_r12android-7.1.1_r11android-7.1.1_r10android-7.1.1_r1android-7.1.0_r7android-7.1.0_r6android-7.1.0_r5android-7.1.0_r4android-7.1.0_r3android-7.1.0_r2android-7.1.0_r1android-7.0.0_r9android-7.0.0_r8android-7.0.0_r7android-7.0.0_r6android-7.0.0_r5android-7.0.0_r4android-7.0.0_r36android-7.0.0_r35android-7.0.0_r34android-7.0.0_r33android-7.0.0_r32android-7.0.0_r31android-7.0.0_r30android-7.0.0_r3android-7.0.0_r29android-7.0.0_r28android-7.0.0_r27android-7.0.0_r24android-7.0.0_r21android-7.0.0_r19android-7.0.0_r17android-7.0.0_r15android-7.0.0_r14android-7.0.0_r13android-7.0.0_r12android-7.0.0_r11android-7.0.0_r10android-7.0.0_r1afw-test-harness-2.1nougat-releasenougat-mr2.3-releasenougat-mr2.2-releasenougat-mr2.1-releasenougat-mr2-security-releasenougat-mr2-releasenougat-mr2-pixel-releasenougat-mr2-devnougat-mr1.8-releasenougat-mr1.7-releasenougat-mr1.6-releasenougat-mr1.5-releasenougat-mr1.4-releasenougat-mr1.3-releasenougat-mr1.2-releasenougat-mr1.1-releasenougat-mr1-wear-releasenougat-mr1-volantis-releasenougat-mr1-security-releasenougat-mr1-releasenougat-mr1-flounder-releasenougat-mr1-devnougat-mr1-cts-releasenougat-mr0.5-releasenougat-iot-releasenougat-dr1-releasenougat-devnougat-cts-releasenougat-bugfix-releasen-preview-2n-mr2-preview-1n-mr1-preview-1n-iot-preview-4n-iot-preview-2brillo-m9-releasebrillo-m9-devbrillo-m8-releasebrillo-m8-devbrillo-m10-releasebrillo-m10-dev
* 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
-rw-r--r--Android.mk1
-rw-r--r--COPYING31
-rw-r--r--COPYING.DOCS7
-rw-r--r--Makefile.all.am26
-rw-r--r--Makefile.am7
-rw-r--r--Makefile.tool-tests.am5
-rw-r--r--Makefile.tool.am25
-rw-r--r--NEWS359
-rw-r--r--README.s3903
-rw-r--r--README.solaris142
-rw-r--r--README_MISSING_SYSCALL_OR_IOCTL51
-rw-r--r--VEX/auxprogs/genoffsets.c2
-rw-r--r--VEX/priv/guest_amd64_defs.h25
-rw-r--r--VEX/priv/guest_amd64_helpers.c430
-rw-r--r--VEX/priv/guest_amd64_toIR.c1256
-rw-r--r--VEX/priv/guest_arm64_defs.h2
-rw-r--r--VEX/priv/guest_arm64_helpers.c2
-rw-r--r--VEX/priv/guest_arm64_toIR.c51
-rw-r--r--VEX/priv/guest_arm_defs.h2
-rw-r--r--VEX/priv/guest_arm_helpers.c2
-rw-r--r--VEX/priv/guest_arm_toIR.c343
-rw-r--r--VEX/priv/guest_generic_bb_to_IR.c2
-rw-r--r--VEX/priv/guest_generic_bb_to_IR.h2
-rw-r--r--VEX/priv/guest_generic_x87.c6
-rw-r--r--VEX/priv/guest_generic_x87.h2
-rw-r--r--VEX/priv/guest_mips_defs.h2
-rw-r--r--VEX/priv/guest_mips_helpers.c10
-rw-r--r--VEX/priv/guest_mips_toIR.c889
-rw-r--r--VEX/priv/guest_ppc_defs.h2
-rw-r--r--VEX/priv/guest_ppc_helpers.c6
-rw-r--r--VEX/priv/guest_ppc_toIR.c475
-rw-r--r--VEX/priv/guest_s390_defs.h2
-rw-r--r--VEX/priv/guest_s390_helpers.c17
-rw-r--r--VEX/priv/guest_s390_toIR.c53
-rw-r--r--VEX/priv/guest_tilegx_defs.h2
-rw-r--r--VEX/priv/guest_tilegx_helpers.c12
-rw-r--r--VEX/priv/guest_tilegx_toIR.c130
-rw-r--r--VEX/priv/guest_x86_defs.h12
-rw-r--r--VEX/priv/guest_x86_helpers.c126
-rw-r--r--VEX/priv/guest_x86_toIR.c163
-rw-r--r--VEX/priv/host_amd64_defs.c161
-rw-r--r--VEX/priv/host_amd64_defs.h16
-rw-r--r--VEX/priv/host_amd64_isel.c53
-rw-r--r--VEX/priv/host_arm64_defs.c4
-rw-r--r--VEX/priv/host_arm64_defs.h2
-rw-r--r--VEX/priv/host_arm64_isel.c27
-rw-r--r--VEX/priv/host_arm_defs.c18
-rw-r--r--VEX/priv/host_arm_defs.h2
-rw-r--r--VEX/priv/host_arm_isel.c4
-rw-r--r--VEX/priv/host_generic_maddf.c2
-rw-r--r--VEX/priv/host_generic_maddf.h2
-rw-r--r--VEX/priv/host_generic_reg_alloc2.c2
-rw-r--r--VEX/priv/host_generic_regs.c2
-rw-r--r--VEX/priv/host_generic_regs.h2
-rw-r--r--VEX/priv/host_generic_simd128.c2
-rw-r--r--VEX/priv/host_generic_simd128.h2
-rw-r--r--VEX/priv/host_generic_simd256.c2
-rw-r--r--VEX/priv/host_generic_simd256.h2
-rw-r--r--VEX/priv/host_generic_simd64.c2
-rw-r--r--VEX/priv/host_generic_simd64.h2
-rw-r--r--VEX/priv/host_mips_defs.c20
-rw-r--r--VEX/priv/host_mips_defs.h2
-rw-r--r--VEX/priv/host_mips_isel.c2
-rw-r--r--VEX/priv/host_ppc_defs.c4
-rw-r--r--VEX/priv/host_ppc_defs.h2
-rw-r--r--VEX/priv/host_ppc_isel.c24
-rw-r--r--VEX/priv/host_s390_defs.c78
-rw-r--r--VEX/priv/host_s390_defs.h10
-rw-r--r--VEX/priv/host_s390_isel.c44
-rw-r--r--VEX/priv/host_tilegx_defs.c8
-rw-r--r--VEX/priv/host_tilegx_defs.h2
-rw-r--r--VEX/priv/host_tilegx_isel.c15
-rw-r--r--VEX/priv/host_x86_defs.c26
-rw-r--r--VEX/priv/host_x86_defs.h2
-rw-r--r--VEX/priv/host_x86_isel.c6
-rw-r--r--VEX/priv/ir_defs.c28
-rw-r--r--VEX/priv/ir_inject.c5
-rw-r--r--VEX/priv/ir_match.c2
-rw-r--r--VEX/priv/ir_match.h2
-rw-r--r--VEX/priv/ir_opt.c6
-rw-r--r--VEX/priv/ir_opt.h2
-rw-r--r--VEX/priv/main_globals.c2
-rw-r--r--VEX/priv/main_globals.h2
-rw-r--r--VEX/priv/main_main.c2
-rw-r--r--VEX/priv/main_util.c55
-rw-r--r--VEX/priv/main_util.h10
-rw-r--r--VEX/priv/s390_defs.h2
-rw-r--r--VEX/priv/s390_disasm.c2
-rw-r--r--VEX/priv/s390_disasm.h2
-rw-r--r--VEX/pub/libvex.h6
-rw-r--r--VEX/pub/libvex_basictypes.h2
-rw-r--r--VEX/pub/libvex_emnote.h2
-rw-r--r--VEX/pub/libvex_guest_amd64.h26
-rw-r--r--VEX/pub/libvex_guest_arm.h2
-rw-r--r--VEX/pub/libvex_guest_arm64.h2
-rw-r--r--VEX/pub/libvex_guest_mips32.h2
-rw-r--r--VEX/pub/libvex_guest_mips64.h2
-rw-r--r--VEX/pub/libvex_guest_ppc32.h11
-rw-r--r--VEX/pub/libvex_guest_ppc64.h12
-rw-r--r--VEX/pub/libvex_guest_s390x.h2
-rw-r--r--VEX/pub/libvex_guest_tilegx.h2
-rw-r--r--VEX/pub/libvex_guest_x86.h31
-rw-r--r--VEX/pub/libvex_ir.h11
-rw-r--r--VEX/pub/libvex_s390x_common.h2
-rw-r--r--VEX/pub/libvex_trc_values.h4
-rw-r--r--VEX/useful/test_main.c8
-rw-r--r--auxprogs/Makefile.am14
-rwxr-xr-xauxprogs/build-gcc55
-rwxr-xr-xauxprogs/change-copyright-year4
-rw-r--r--auxprogs/getoff.c2
-rwxr-xr-xauxprogs/gsl16test4
-rwxr-xr-xauxprogs/gsl19test4
-rw-r--r--auxprogs/valgrind-di-server.c6
-rw-r--r--auxprogs/valgrind-listener.c2
-rw-r--r--cachegrind/Makefile.am4
-rw-r--r--cachegrind/cg_annotate.in4
-rw-r--r--cachegrind/cg_arch.c4
-rw-r--r--cachegrind/cg_arch.h2
-rw-r--r--cachegrind/cg_branchpred.c2
-rwxr-xr-xcachegrind/cg_diff.in4
-rw-r--r--cachegrind/cg_main.c18
-rw-r--r--cachegrind/cg_merge.c2
-rw-r--r--cachegrind/cg_sim.c4
-rw-r--r--callgrind/bb.c20
-rw-r--r--callgrind/bbcc.c14
-rw-r--r--callgrind/callgrind.h2
-rw-r--r--callgrind/callgrind_annotate.in4
-rw-r--r--callgrind/callgrind_control.in2
-rw-r--r--callgrind/callstack.c8
-rw-r--r--callgrind/clo.c4
-rw-r--r--callgrind/context.c14
-rw-r--r--callgrind/costs.c2
-rw-r--r--callgrind/costs.h2
-rw-r--r--callgrind/debug.c26
-rw-r--r--callgrind/docs/cl-format.xml122
-rw-r--r--callgrind/docs/cl-manual.xml111
-rw-r--r--callgrind/dump.c62
-rw-r--r--callgrind/events.c2
-rw-r--r--callgrind/events.h2
-rw-r--r--callgrind/fn.c14
-rw-r--r--callgrind/global.h2
-rw-r--r--callgrind/jumps.c6
-rw-r--r--callgrind/main.c20
-rw-r--r--callgrind/sim.c44
-rw-r--r--callgrind/threads.c10
-rw-r--r--configure.ac1310
-rw-r--r--coregrind/Makefile.am59
-rw-r--r--coregrind/fixup_macho_loadcmds.c5
-rw-r--r--coregrind/launcher-darwin.c2
-rw-r--r--coregrind/launcher-linux.c44
-rw-r--r--coregrind/link_tool_exe_solaris.in84
-rw-r--r--coregrind/m_addrinfo.c59
-rw-r--r--coregrind/m_aspacehl.c2
-rw-r--r--coregrind/m_aspacemgr/aspacemgr-common.c61
-rw-r--r--coregrind/m_aspacemgr/aspacemgr-linux.c564
-rw-r--r--coregrind/m_aspacemgr/aspacemgr-segnames.c6
-rw-r--r--coregrind/m_aspacemgr/priv_aspacemgr.h2
-rw-r--r--coregrind/m_cache.c2
-rw-r--r--coregrind/m_clientstate.c21
-rw-r--r--coregrind/m_commandline.c2
-rw-r--r--coregrind/m_compiler.c2
-rw-r--r--coregrind/m_coredump/coredump-elf.c15
-rw-r--r--coregrind/m_coredump/coredump-solaris.c1110
-rw-r--r--coregrind/m_cpuid.S6
-rw-r--r--coregrind/m_debugger.c559
-rw-r--r--coregrind/m_debuginfo/d3basics.c12
-rw-r--r--coregrind/m_debuginfo/debuginfo.c176
-rw-r--r--coregrind/m_debuginfo/image.c28
-rw-r--r--coregrind/m_debuginfo/misc.c2
-rw-r--r--coregrind/m_debuginfo/priv_d3basics.h2
-rw-r--r--coregrind/m_debuginfo/priv_image.h2
-rw-r--r--coregrind/m_debuginfo/priv_misc.h2
-rw-r--r--coregrind/m_debuginfo/priv_readdwarf.h2
-rw-r--r--coregrind/m_debuginfo/priv_readdwarf3.h2
-rw-r--r--coregrind/m_debuginfo/priv_readelf.h2
-rw-r--r--coregrind/m_debuginfo/priv_readexidx.h2
-rw-r--r--coregrind/m_debuginfo/priv_readpdb.h6
-rw-r--r--coregrind/m_debuginfo/priv_storage.h2
-rw-r--r--coregrind/m_debuginfo/priv_tytypes.h2
-rw-r--r--coregrind/m_debuginfo/readdwarf.c83
-rw-r--r--coregrind/m_debuginfo/readdwarf3.c41
-rw-r--r--coregrind/m_debuginfo/readelf.c120
-rw-r--r--coregrind/m_debuginfo/readexidx.c36
-rw-r--r--coregrind/m_debuginfo/readmacho.c6
-rw-r--r--coregrind/m_debuginfo/readpdb.c42
-rw-r--r--coregrind/m_debuginfo/storage.c38
-rw-r--r--coregrind/m_debuginfo/tytypes.c6
-rw-r--r--coregrind/m_debuglog.c96
-rw-r--r--coregrind/m_deduppoolalloc.c4
-rw-r--r--coregrind/m_demangle/cplus-dem.c2
-rw-r--r--coregrind/m_demangle/demangle.c3
-rw-r--r--coregrind/m_demangle/vg_libciface.h2
-rw-r--r--coregrind/m_dispatch/dispatch-amd64-darwin.S8
-rw-r--r--coregrind/m_dispatch/dispatch-amd64-linux.S11
-rw-r--r--coregrind/m_dispatch/dispatch-amd64-solaris.S260
-rw-r--r--coregrind/m_dispatch/dispatch-arm-linux.S11
-rw-r--r--coregrind/m_dispatch/dispatch-arm64-linux.S11
-rw-r--r--coregrind/m_dispatch/dispatch-mips32-linux.S10
-rw-r--r--coregrind/m_dispatch/dispatch-mips64-linux.S10
-rw-r--r--coregrind/m_dispatch/dispatch-ppc32-linux.S14
-rw-r--r--coregrind/m_dispatch/dispatch-ppc64be-linux.S11
-rw-r--r--coregrind/m_dispatch/dispatch-ppc64le-linux.S11
-rw-r--r--coregrind/m_dispatch/dispatch-s390x-linux.S10
-rw-r--r--coregrind/m_dispatch/dispatch-tilegx-linux.S11
-rw-r--r--coregrind/m_dispatch/dispatch-x86-darwin.S8
-rw-r--r--coregrind/m_dispatch/dispatch-x86-linux.S11
-rw-r--r--coregrind/m_dispatch/dispatch-x86-solaris.S251
-rw-r--r--coregrind/m_errormgr.c30
-rw-r--r--coregrind/m_execontext.c2
-rw-r--r--coregrind/m_gdbserver/m_gdbserver.c38
-rw-r--r--coregrind/m_gdbserver/remote-utils.c25
-rw-r--r--coregrind/m_gdbserver/server.c30
-rw-r--r--coregrind/m_gdbserver/signals.c2
-rw-r--r--coregrind/m_gdbserver/target.c16
-rw-r--r--coregrind/m_gdbserver/target.h2
-rw-r--r--coregrind/m_gdbserver/utils.c2
-rw-r--r--coregrind/m_gdbserver/valgrind-low-tilegx.c8
-rw-r--r--coregrind/m_hashtable.c8
-rw-r--r--coregrind/m_initimg/initimg-darwin.c2
-rw-r--r--coregrind/m_initimg/initimg-linux.c22
-rw-r--r--coregrind/m_initimg/initimg-pathscan.c2
-rw-r--r--coregrind/m_initimg/initimg-solaris.c1038
-rw-r--r--coregrind/m_initimg/priv_initimg_pathscan.h2
-rw-r--r--coregrind/m_libcassert.c41
-rw-r--r--coregrind/m_libcbase.c4
-rw-r--r--coregrind/m_libcfile.c203
-rw-r--r--coregrind/m_libcprint.c4
-rw-r--r--coregrind/m_libcproc.c415
-rw-r--r--coregrind/m_libcsetjmp.c2
-rw-r--r--coregrind/m_libcsignal.c95
-rw-r--r--coregrind/m_mach/mach_basics.c2
-rw-r--r--coregrind/m_mach/mach_traps-amd64-darwin.S7
-rw-r--r--coregrind/m_mach/mach_traps-x86-darwin.S7
-rw-r--r--coregrind/m_machine.c49
-rw-r--r--coregrind/m_main.c215
-rw-r--r--coregrind/m_mallocfree.c34
-rw-r--r--coregrind/m_options.c23
-rw-r--r--coregrind/m_oset.c8
-rw-r--r--coregrind/m_poolalloc.c2
-rw-r--r--coregrind/m_rangemap.c8
-rw-r--r--coregrind/m_redir.c69
-rw-r--r--coregrind/m_replacemalloc/replacemalloc_core.c2
-rw-r--r--coregrind/m_replacemalloc/vg_replace_malloc.c127
-rw-r--r--coregrind/m_sbprofile.c10
-rw-r--r--coregrind/m_scheduler/priv_sched-lock-impl.h2
-rw-r--r--coregrind/m_scheduler/priv_sched-lock.h2
-rw-r--r--coregrind/m_scheduler/priv_sema.h2
-rw-r--r--coregrind/m_scheduler/sched-lock-generic.c2
-rw-r--r--coregrind/m_scheduler/sched-lock.c2
-rw-r--r--coregrind/m_scheduler/scheduler.c77
-rw-r--r--coregrind/m_scheduler/sema.c2
-rw-r--r--coregrind/m_scheduler/ticket-lock-linux.c16
-rw-r--r--coregrind/m_seqmatch.c2
-rw-r--r--coregrind/m_sigframe/sigframe-amd64-darwin.c136
-rw-r--r--coregrind/m_sigframe/sigframe-amd64-linux.c9
-rw-r--r--coregrind/m_sigframe/sigframe-arm-linux.c52
-rw-r--r--coregrind/m_sigframe/sigframe-arm64-linux.c5
-rw-r--r--coregrind/m_sigframe/sigframe-common.c8
-rw-r--r--coregrind/m_sigframe/sigframe-mips32-linux.c5
-rw-r--r--coregrind/m_sigframe/sigframe-mips64-linux.c5
-rw-r--r--coregrind/m_sigframe/sigframe-ppc32-linux.c11
-rw-r--r--coregrind/m_sigframe/sigframe-ppc64-linux.c9
-rw-r--r--coregrind/m_sigframe/sigframe-s390x-linux.c9
-rw-r--r--coregrind/m_sigframe/sigframe-solaris.c270
-rw-r--r--coregrind/m_sigframe/sigframe-tilegx-linux.c10
-rw-r--r--coregrind/m_sigframe/sigframe-x86-darwin.c127
-rw-r--r--coregrind/m_sigframe/sigframe-x86-linux.c9
-rw-r--r--coregrind/m_signals.c365
-rw-r--r--coregrind/m_sparsewa.c2
-rw-r--r--coregrind/m_stacks.c7
-rw-r--r--coregrind/m_stacktrace.c169
-rw-r--r--coregrind/m_syscall.c270
-rw-r--r--coregrind/m_syswrap/priv_syswrap-darwin.h63
-rw-r--r--coregrind/m_syswrap/priv_syswrap-generic.h17
-rw-r--r--coregrind/m_syswrap/priv_syswrap-linux-variants.h2
-rw-r--r--coregrind/m_syswrap/priv_syswrap-linux.h2
-rw-r--r--coregrind/m_syswrap/priv_syswrap-main.h2
-rw-r--r--coregrind/m_syswrap/priv_syswrap-solaris.h92
-rw-r--r--coregrind/m_syswrap/priv_syswrap-xen.h2
-rw-r--r--coregrind/m_syswrap/priv_types_n_macros.h28
-rw-r--r--coregrind/m_syswrap/syscall-amd64-darwin.S8
-rw-r--r--coregrind/m_syswrap/syscall-amd64-linux.S11
-rw-r--r--coregrind/m_syswrap/syscall-amd64-solaris.S282
-rw-r--r--coregrind/m_syswrap/syscall-arm-linux.S13
-rw-r--r--coregrind/m_syswrap/syscall-arm64-linux.S13
-rw-r--r--coregrind/m_syswrap/syscall-mips32-linux.S13
-rw-r--r--coregrind/m_syswrap/syscall-mips64-linux.S11
-rw-r--r--coregrind/m_syswrap/syscall-ppc32-linux.S13
-rw-r--r--coregrind/m_syswrap/syscall-ppc64be-linux.S10
-rw-r--r--coregrind/m_syswrap/syscall-ppc64le-linux.S10
-rw-r--r--coregrind/m_syswrap/syscall-s390x-linux.S8
-rw-r--r--coregrind/m_syswrap/syscall-tilegx-linux.S8
-rw-r--r--coregrind/m_syswrap/syscall-x86-darwin.S14
-rw-r--r--coregrind/m_syswrap/syscall-x86-linux.S11
-rw-r--r--coregrind/m_syswrap/syscall-x86-solaris.S279
-rw-r--r--coregrind/m_syswrap/syswrap-amd64-darwin.c14
-rw-r--r--coregrind/m_syswrap/syswrap-amd64-linux.c17
-rw-r--r--coregrind/m_syswrap/syswrap-amd64-solaris.c564
-rw-r--r--coregrind/m_syswrap/syswrap-arm-linux.c27
-rw-r--r--coregrind/m_syswrap/syswrap-arm64-linux.c36
-rw-r--r--coregrind/m_syswrap/syswrap-darwin.c946
-rw-r--r--coregrind/m_syswrap/syswrap-generic.c473
-rw-r--r--coregrind/m_syswrap/syswrap-linux-variants.c2
-rw-r--r--coregrind/m_syswrap/syswrap-linux.c678
-rw-r--r--coregrind/m_syswrap/syswrap-main.c501
-rw-r--r--coregrind/m_syswrap/syswrap-mips32-linux.c30
-rw-r--r--coregrind/m_syswrap/syswrap-mips64-linux.c51
-rw-r--r--coregrind/m_syswrap/syswrap-ppc32-linux.c23
-rw-r--r--coregrind/m_syswrap/syswrap-ppc64-linux.c12
-rw-r--r--coregrind/m_syswrap/syswrap-s390x-linux.c15
-rw-r--r--coregrind/m_syswrap/syswrap-solaris.c10541
-rw-r--r--coregrind/m_syswrap/syswrap-tilegx-linux.c93
-rw-r--r--coregrind/m_syswrap/syswrap-x86-darwin.c8
-rw-r--r--coregrind/m_syswrap/syswrap-x86-linux.c50
-rw-r--r--coregrind/m_syswrap/syswrap-x86-solaris.c990
-rw-r--r--coregrind/m_syswrap/syswrap-xen.c697
-rw-r--r--coregrind/m_threadstate.c12
-rw-r--r--coregrind/m_tooliface.c5
-rw-r--r--coregrind/m_trampoline.S195
-rw-r--r--coregrind/m_translate.c12
-rw-r--r--coregrind/m_transtab.c12
-rw-r--r--coregrind/m_ume/elf.c86
-rw-r--r--coregrind/m_ume/macho.c14
-rw-r--r--coregrind/m_ume/main.c4
-rw-r--r--coregrind/m_ume/priv_ume.h8
-rw-r--r--coregrind/m_ume/script.c29
-rw-r--r--coregrind/m_vki.c12
-rw-r--r--coregrind/m_vkiscnums.c33
-rw-r--r--coregrind/m_wordfm.c4
-rw-r--r--coregrind/m_xarray.c5
-rw-r--r--coregrind/pub_core_addrinfo.h2
-rw-r--r--coregrind/pub_core_aspacehl.h2
-rw-r--r--coregrind/pub_core_aspacemgr.h21
-rw-r--r--coregrind/pub_core_basics.h2
-rw-r--r--coregrind/pub_core_basics_asm.h2
-rw-r--r--coregrind/pub_core_clientstate.h21
-rw-r--r--coregrind/pub_core_clreq.h2
-rw-r--r--coregrind/pub_core_commandline.h2
-rw-r--r--coregrind/pub_core_coredump.h2
-rw-r--r--coregrind/pub_core_cpuid.h2
-rw-r--r--coregrind/pub_core_debuginfo.h24
-rw-r--r--coregrind/pub_core_debuglog.h2
-rw-r--r--coregrind/pub_core_deduppoolalloc.h2
-rw-r--r--coregrind/pub_core_demangle.h2
-rw-r--r--coregrind/pub_core_dispatch.h2
-rw-r--r--coregrind/pub_core_dispatch_asm.h2
-rw-r--r--coregrind/pub_core_errormgr.h4
-rw-r--r--coregrind/pub_core_execontext.h2
-rw-r--r--coregrind/pub_core_gdbserver.h6
-rw-r--r--coregrind/pub_core_guest.h2
-rw-r--r--coregrind/pub_core_hashtable.h2
-rw-r--r--coregrind/pub_core_initimg.h26
-rw-r--r--coregrind/pub_core_inner.h2
-rw-r--r--coregrind/pub_core_libcassert.h7
-rw-r--r--coregrind/pub_core_libcbase.h2
-rw-r--r--coregrind/pub_core_libcfile.h2
-rw-r--r--coregrind/pub_core_libcprint.h2
-rw-r--r--coregrind/pub_core_libcproc.h9
-rw-r--r--coregrind/pub_core_libcsetjmp.h2
-rw-r--r--coregrind/pub_core_libcsignal.h4
-rw-r--r--coregrind/pub_core_mach.h2
-rw-r--r--coregrind/pub_core_machine.h7
-rw-r--r--coregrind/pub_core_mallocfree.h12
-rw-r--r--coregrind/pub_core_options.h7
-rw-r--r--coregrind/pub_core_oset.h2
-rw-r--r--coregrind/pub_core_poolalloc.h2
-rw-r--r--coregrind/pub_core_rangemap.h2
-rw-r--r--coregrind/pub_core_redir.h2
-rw-r--r--coregrind/pub_core_replacemalloc.h2
-rw-r--r--coregrind/pub_core_sbprofile.h2
-rw-r--r--coregrind/pub_core_scheduler.h2
-rw-r--r--coregrind/pub_core_seqmatch.h2
-rw-r--r--coregrind/pub_core_sigframe.h13
-rw-r--r--coregrind/pub_core_signals.h2
-rw-r--r--coregrind/pub_core_sparsewa.h2
-rw-r--r--coregrind/pub_core_stacks.h2
-rw-r--r--coregrind/pub_core_stacktrace.h2
-rw-r--r--coregrind/pub_core_syscall.h9
-rw-r--r--coregrind/pub_core_syswrap.h22
-rw-r--r--coregrind/pub_core_threadstate.h52
-rw-r--r--coregrind/pub_core_tooliface.h5
-rw-r--r--coregrind/pub_core_trampoline.h16
-rw-r--r--coregrind/pub_core_translate.h2
-rw-r--r--coregrind/pub_core_transtab.h2
-rw-r--r--coregrind/pub_core_transtab_asm.h2
-rw-r--r--coregrind/pub_core_ume.h8
-rw-r--r--coregrind/pub_core_vki.h6
-rw-r--r--coregrind/pub_core_vkiscnums.h6
-rw-r--r--coregrind/pub_core_vkiscnums_asm.h6
-rw-r--r--coregrind/pub_core_wordfm.h4
-rw-r--r--coregrind/pub_core_xarray.h2
-rw-r--r--coregrind/vg_preloaded.c163
-rw-r--r--coregrind/vgdb-invoker-none.c2
-rw-r--r--coregrind/vgdb-invoker-ptrace.c10
-rw-r--r--coregrind/vgdb-invoker-solaris.c530
-rw-r--r--coregrind/vgdb.c4
-rw-r--r--coregrind/vgdb.h2
-rw-r--r--darwin11.supp17
-rw-r--r--darwin15.supp761
-rw-r--r--docs/README16
-rw-r--r--docs/internals/3_10_BUGSTATUS.txt364
-rw-r--r--docs/internals/Darwin-notes.txt7
-rw-r--r--docs/internals/s390-opcodes.csv6
-rw-r--r--docs/internals/xml-output-protocol4.txt6
-rw-r--r--docs/xml/dist-docs.xml10
-rw-r--r--docs/xml/manual-core-adv.xml8
-rw-r--r--docs/xml/manual-core.xml194
-rw-r--r--docs/xml/vg-entities.xml6
-rw-r--r--drd/docs/drd-manual.xml36
-rw-r--r--drd/drd.h2
-rw-r--r--drd/drd_barrier.c12
-rw-r--r--drd/drd_barrier.h2
-rw-r--r--drd/drd_basics.h2
-rw-r--r--drd/drd_bitmap.c2
-rw-r--r--drd/drd_bitmap.h2
-rw-r--r--drd/drd_clientobj.c6
-rw-r--r--drd/drd_clientobj.h2
-rw-r--r--drd/drd_clientreq.c12
-rw-r--r--drd/drd_clientreq.h11
-rw-r--r--drd/drd_cond.c14
-rw-r--r--drd/drd_cond.h2
-rw-r--r--drd/drd_darwin_intercepts.c2
-rw-r--r--drd/drd_error.c16
-rw-r--r--drd/drd_error.h2
-rw-r--r--drd/drd_hb.c8
-rw-r--r--drd/drd_hb.h2
-rw-r--r--drd/drd_libstdcxx_intercepts.c2
-rw-r--r--drd/drd_load_store.c8
-rw-r--r--drd/drd_load_store.h2
-rw-r--r--drd/drd_main.c65
-rw-r--r--drd/drd_malloc_wrappers.c2
-rw-r--r--drd/drd_malloc_wrappers.h2
-rw-r--r--drd/drd_mutex.c14
-rw-r--r--drd/drd_mutex.h2
-rw-r--r--drd/drd_pthread_intercepts.c590
-rw-r--r--drd/drd_qtcore_intercepts.c2
-rw-r--r--drd/drd_rwlock.c16
-rw-r--r--drd/drd_rwlock.h2
-rw-r--r--drd/drd_segment.c4
-rw-r--r--drd/drd_segment.h2
-rw-r--r--drd/drd_semaphore.c18
-rw-r--r--drd/drd_semaphore.h2
-rw-r--r--drd/drd_strmem_intercepts.c2
-rw-r--r--drd/drd_suppression.c12
-rw-r--r--drd/drd_thread.c114
-rw-r--r--drd/drd_thread.h17
-rw-r--r--drd/drd_thread_bitmap.h2
-rw-r--r--drd/drd_vc.c4
-rw-r--r--drd/drd_vc.h2
-rw-r--r--drd/pub_drd_bitmap.h2
-rwxr-xr-xdrd/scripts/download-and-build-splash2.in2
-rw-r--r--drd/tests/Makefile.am44
-rw-r--r--drd/tests/annotate_ignore_rw2.stderr.exp-solaris25
-rw-r--r--drd/tests/annotate_ignore_write.stderr.exp-solaris23
-rw-r--r--drd/tests/annotate_ignore_write2.stderr.exp-solaris30
-rwxr-xr-xdrd/tests/filter_stderr7
-rwxr-xr-xdrd/tests/filter_stderr_solaris55
-rwxr-xr-xdrd/tests/filter_thread_name_xml12
-rw-r--r--drd/tests/fp_race_xml.stderr.exp-solaris104
-rw-r--r--drd/tests/matinv.vgtest2
-rw-r--r--drd/tests/omp_matinv.vgtest2
-rw-r--r--drd/tests/omp_matinv_racy.vgtest2
-rw-r--r--drd/tests/omp_prime_racy.vgtest2
-rw-r--r--drd/tests/pth_barrier.c4
-rw-r--r--drd/tests/pth_cond_destroy_busy.stderr.exp-solaris35
-rw-r--r--drd/tests/pth_inconsistent_cond_wait.c3
-rw-r--r--drd/tests/recursive_mutex.stderr.exp-solaris18
-rw-r--r--drd/tests/sem_open.c4
-rw-r--r--drd/tests/sigalrm.c4
-rw-r--r--drd/tests/std_string.cpp1
-rw-r--r--drd/tests/tc09_bad_unlock.stderr.exp-solaris54
-rw-r--r--drd/tests/tc12_rwl_trivial.stderr.exp5
-rw-r--r--drd/tests/tc12_rwl_trivial.vgtest1
-rw-r--r--drd/tests/tc18_semabuse.stderr.exp-solaris10
-rw-r--r--drd/tests/thread_name_xml.vgtest2
-rw-r--r--drd/tests/tsan_unittest.cpp8
-rw-r--r--exp-bbv/bbv_main.c18
-rw-r--r--exp-bbv/tests/x86/complex_rep.S14
-rw-r--r--exp-bbv/tests/x86/fldcw_check.S37
-rw-r--r--exp-bbv/tests/x86/million.S17
-rw-r--r--exp-bbv/tests/x86/rep_prefix.S38
-rw-r--r--exp-dhat/dh_main.c8
-rw-r--r--exp-sgcheck/h_intercepts.c18
-rw-r--r--exp-sgcheck/h_main.c4
-rw-r--r--exp-sgcheck/h_main.h4
-rw-r--r--exp-sgcheck/pc_common.c26
-rw-r--r--exp-sgcheck/pc_common.h2
-rw-r--r--exp-sgcheck/pc_main.c4
-rw-r--r--exp-sgcheck/sg_main.c8
-rw-r--r--exp-sgcheck/sg_main.h2
-rw-r--r--exp-sgcheck/tests/bad_percentify.vgtest2
-rw-r--r--exp-sgcheck/tests/globalerr.vgtest2
-rw-r--r--exp-sgcheck/tests/hackedbz2.vgtest2
-rw-r--r--exp-sgcheck/tests/hsg.vgtest2
-rw-r--r--exp-sgcheck/tests/preen_invars.vgtest2
-rw-r--r--exp-sgcheck/tests/stackerr.vgtest2
-rw-r--r--gdbserver_tests/Makefile.am18
-rwxr-xr-xgdbserver_tests/filter_gdb7
-rwxr-xr-xgdbserver_tests/filter_helgrind_monitor7
-rwxr-xr-xgdbserver_tests/filter_helgrind_monitor_solaris42
-rwxr-xr-xgdbserver_tests/filter_passsigalrm10
-rwxr-xr-xgdbserver_tests/filter_stderr3
-rw-r--r--gdbserver_tests/hginfo.stdoutB.exp2
-rw-r--r--gdbserver_tests/hgtls.stdoutB.exp14
-rw-r--r--gdbserver_tests/main_pic.c5
-rwxr-xr-xgdbserver_tests/make_local_links2
-rw-r--r--gdbserver_tests/mcbreak.stdinB.gdb10
-rw-r--r--gdbserver_tests/mcbreak.stdoutB.exp53
-rw-r--r--gdbserver_tests/mchelp.stdoutB.exp37
-rw-r--r--gdbserver_tests/mcinfcallRU.vgtest2
-rw-r--r--gdbserver_tests/mcinfcallWSRU.stderrB.exp27
-rw-r--r--gdbserver_tests/mcinfcallWSRU.vgtest2
-rw-r--r--gdbserver_tests/mcmain_pic.stderr.exp-solaris7
-rw-r--r--gdbserver_tests/mcmain_pic.stdinB.gdb2
-rw-r--r--gdbserver_tests/mcmain_pic.stdoutB.exp6
-rw-r--r--gdbserver_tests/mcsignopass.stderr.exp4
-rw-r--r--gdbserver_tests/mcsignopass.stdoutB.exp48
-rw-r--r--gdbserver_tests/mcsigpass.stderr.exp4
-rw-r--r--gdbserver_tests/mcsigpass.stdoutB.exp12
-rw-r--r--gdbserver_tests/mcvabits.stderrB.exp4
-rw-r--r--gdbserver_tests/mcvabits.stdinB.gdb1
-rw-r--r--gdbserver_tests/mcvabits.stdoutB.exp14
-rw-r--r--gdbserver_tests/mssnapshot.stdoutB.exp6
-rw-r--r--gdbserver_tests/nlcontrolc.stdoutB.exp7
-rw-r--r--gdbserver_tests/nlcontrolc.vgtest4
-rw-r--r--gdbserver_tests/nlgone_abrt.vgtest1
-rw-r--r--gdbserver_tests/nlgone_exit.vgtest1
-rw-r--r--gdbserver_tests/nlpasssigalrm.stdoutB.exp2
-rw-r--r--gdbserver_tests/nlpasssigalrm.vgtest2
-rw-r--r--gdbserver_tests/nlvgdbsigqueue.stdoutB.exp-solaris116
-rw-r--r--gdbserver_tests/nlvgdbsigqueue.stdoutB.exp-solaris217
-rw-r--r--gdbserver_tests/sleepers.c8
-rw-r--r--gdbserver_tests/solaris/Makefile.am12
-rwxr-xr-xgdbserver_tests/solaris/filter_stderr3
-rw-r--r--gdbserver_tests/solaris/nlcontrolc.stderr.exp11
-rw-r--r--gdbserver_tests/solaris/nlcontrolc.stderrB.exp (renamed from none/tests/scripts/shell_nointerp1.stderr.exp)0
-rw-r--r--gdbserver_tests/solaris/nlcontrolc.stdinB.gdb31
-rw-r--r--gdbserver_tests/solaris/nlcontrolc.stdoutB.exp17
-rw-r--r--gdbserver_tests/solaris/nlcontrolc.vgtest17
-rw-r--r--gdbserver_tests/t.c3
-rw-r--r--glibc-2.34567-NPTL-helgrind.supp12
-rw-r--r--helgrind/docs/hg-manual.xml45
-rw-r--r--helgrind/helgrind.h50
-rw-r--r--helgrind/hg_addrdescr.c2
-rw-r--r--helgrind/hg_addrdescr.h2
-rw-r--r--helgrind/hg_basics.c4
-rw-r--r--helgrind/hg_basics.h6
-rw-r--r--helgrind/hg_errors.c8
-rw-r--r--helgrind/hg_errors.h2
-rw-r--r--helgrind/hg_intercepts.c1241
-rw-r--r--helgrind/hg_lock_n_thread.c2
-rw-r--r--helgrind/hg_lock_n_thread.h25
-rw-r--r--helgrind/hg_main.c338
-rw-r--r--helgrind/hg_wordset.c2
-rw-r--r--helgrind/hg_wordset.h2
-rw-r--r--helgrind/libhb.h2
-rw-r--r--helgrind/libhb_core.c36
-rw-r--r--helgrind/tests/Makefile.am14
-rw-r--r--helgrind/tests/annotate_rwlock.c4
-rwxr-xr-xhelgrind/tests/filter_stderr11
-rwxr-xr-xhelgrind/tests/filter_stderr_solaris33
-rwxr-xr-xhelgrind/tests/filter_xml6
-rw-r--r--helgrind/tests/hg02_deadlock.stderr.exp18
-rw-r--r--helgrind/tests/locked_vs_unlocked1_fwd.stderr.exp3
-rw-r--r--helgrind/tests/locked_vs_unlocked1_rev.stderr.exp3
-rw-r--r--helgrind/tests/pth_cond_destroy_busy.stderr.exp-solaris16
-rw-r--r--helgrind/tests/pth_cond_destroy_busy.vgtest1
-rw-r--r--helgrind/tests/safe-pthread.h69
-rw-r--r--helgrind/tests/safe-semaphore.h41
-rw-r--r--helgrind/tests/tc06_two_races_xml.stderr.exp2
-rw-r--r--helgrind/tests/tc07_hbl1.c9
-rw-r--r--helgrind/tests/tc08_hbl2.c9
-rw-r--r--helgrind/tests/tc09_bad_unlock.stderr.exp33
-rw-r--r--helgrind/tests/tc09_bad_unlock.stderr.exp-solaris146
-rw-r--r--helgrind/tests/tc09_bad_unlock.vgtest1
-rw-r--r--helgrind/tests/tc10_rec_lock.stderr.exp6
-rw-r--r--helgrind/tests/tc11_XCHG.c9
-rw-r--r--helgrind/tests/tc12_rwl_trivial.c15
-rw-r--r--helgrind/tests/tc12_rwl_trivial.stderr.exp7
-rw-r--r--helgrind/tests/tc12_rwl_trivial.stderr.exp-solaris31
-rw-r--r--helgrind/tests/tc12_rwl_trivial.vgtest1
-rw-r--r--helgrind/tests/tc13_laog1.stderr.exp12
-rw-r--r--helgrind/tests/tc14_laog_dinphils.stderr.exp6
-rw-r--r--helgrind/tests/tc15_laog_lockdel.stderr.exp12
-rw-r--r--helgrind/tests/tc17_sembar.c4
-rw-r--r--helgrind/tests/tc18_semabuse.c5
-rw-r--r--helgrind/tests/tc18_semabuse.stderr.exp3
-rw-r--r--helgrind/tests/tc18_semabuse.stderr.exp-linux-mips32-b2
-rw-r--r--helgrind/tests/tc18_semabuse.stderr.exp-solaris15
-rw-r--r--helgrind/tests/tc19_shadowmem.stderr.exp3
-rw-r--r--helgrind/tests/tc19_shadowmem.stderr.exp-mips323
-rw-r--r--helgrind/tests/tc20_verifywrap.c28
-rw-r--r--helgrind/tests/tc20_verifywrap.stderr.exp87
-rw-r--r--helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.1874
-rw-r--r--helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.21247
-rw-r--r--helgrind/tests/tc20_verifywrap.stderr.exp-mips3278
-rw-r--r--helgrind/tests/tc20_verifywrap.stderr.exp-mips32-b80
-rw-r--r--helgrind/tests/tc20_verifywrap.stderr.exp-s390x78
-rw-r--r--helgrind/tests/tc20_verifywrap.stderr.exp-solaris259
-rw-r--r--helgrind/tests/tc20_verifywrap.vgtest2
-rw-r--r--helgrind/tests/tc22_exit_w_lock.stderr.exp-solaris39
-rw-r--r--helgrind/tests/tc23_bogus_condwait.c2
-rw-r--r--helgrind/tests/tc24_nonzero_sem.c2
-rw-r--r--include/Makefile.am6
-rw-r--r--include/pub_tool_addrinfo.h2
-rw-r--r--include/pub_tool_aspacehl.h2
-rw-r--r--include/pub_tool_aspacemgr.h2
-rw-r--r--include/pub_tool_basics.h116
-rw-r--r--include/pub_tool_basics_asm.h18
-rw-r--r--include/pub_tool_clientstate.h2
-rw-r--r--include/pub_tool_clreq.h2
-rw-r--r--include/pub_tool_debuginfo.h13
-rw-r--r--include/pub_tool_deduppoolalloc.h2
-rw-r--r--include/pub_tool_errormgr.h2
-rw-r--r--include/pub_tool_execontext.h2
-rw-r--r--include/pub_tool_gdbserver.h2
-rw-r--r--include/pub_tool_guest.h2
-rw-r--r--include/pub_tool_hashtable.h4
-rw-r--r--include/pub_tool_libcassert.h2
-rw-r--r--include/pub_tool_libcbase.h2
-rw-r--r--include/pub_tool_libcfile.h4
-rw-r--r--include/pub_tool_libcprint.h2
-rw-r--r--include/pub_tool_libcproc.h17
-rw-r--r--include/pub_tool_libcsetjmp.h2
-rw-r--r--include/pub_tool_libcsignal.h7
-rw-r--r--include/pub_tool_machine.h6
-rw-r--r--include/pub_tool_mallocfree.h2
-rw-r--r--include/pub_tool_options.h2
-rw-r--r--include/pub_tool_oset.h4
-rw-r--r--include/pub_tool_poolalloc.h2
-rw-r--r--include/pub_tool_rangemap.h4
-rw-r--r--include/pub_tool_redir.h28
-rw-r--r--include/pub_tool_replacemalloc.h2
-rw-r--r--include/pub_tool_seqmatch.h2
-rw-r--r--include/pub_tool_signals.h7
-rw-r--r--include/pub_tool_sparsewa.h2
-rw-r--r--include/pub_tool_stacktrace.h2
-rw-r--r--include/pub_tool_threadstate.h2
-rw-r--r--include/pub_tool_tooliface.h12
-rw-r--r--include/pub_tool_transtab.h2
-rw-r--r--include/pub_tool_vki.h8
-rw-r--r--include/pub_tool_vkiscnums.h4
-rw-r--r--include/pub_tool_vkiscnums_asm.h7
-rw-r--r--include/pub_tool_wordfm.h4
-rw-r--r--include/pub_tool_xarray.h2
-rw-r--r--include/valgrind.h44
-rw-r--r--include/vki/vki-amd64-linux.h9
-rw-r--r--include/vki/vki-arm-linux.h9
-rw-r--r--include/vki/vki-arm64-linux.h9
-rw-r--r--include/vki/vki-darwin.h32
-rw-r--r--include/vki/vki-linux.h90
-rw-r--r--include/vki/vki-mips32-linux.h2
-rw-r--r--include/vki/vki-mips64-linux.h2
-rw-r--r--include/vki/vki-posixtypes-amd64-linux.h2
-rw-r--r--include/vki/vki-posixtypes-arm-linux.h2
-rw-r--r--include/vki/vki-posixtypes-arm64-linux.h2
-rw-r--r--include/vki/vki-posixtypes-mips32-linux.h2
-rw-r--r--include/vki/vki-posixtypes-mips64-linux.h2
-rw-r--r--include/vki/vki-posixtypes-ppc32-linux.h2
-rw-r--r--include/vki/vki-posixtypes-ppc64-linux.h2
-rw-r--r--include/vki/vki-posixtypes-s390x-linux.h2
-rw-r--r--include/vki/vki-posixtypes-tilegx-linux.h2
-rw-r--r--include/vki/vki-posixtypes-x86-linux.h2
-rw-r--r--include/vki/vki-ppc32-linux.h6
-rw-r--r--include/vki/vki-ppc64-linux.h9
-rw-r--r--include/vki/vki-s390x-linux.h14
-rw-r--r--include/vki/vki-scnums-amd64-linux.h2
-rw-r--r--include/vki/vki-scnums-arm-linux.h2
-rw-r--r--include/vki/vki-scnums-arm64-linux.h2
-rw-r--r--include/vki/vki-scnums-darwin.h71
-rw-r--r--include/vki/vki-scnums-mips32-linux.h2
-rw-r--r--include/vki/vki-scnums-mips64-linux.h2
-rw-r--r--include/vki/vki-scnums-ppc32-linux.h2
-rw-r--r--include/vki/vki-scnums-ppc64-linux.h2
-rw-r--r--include/vki/vki-scnums-s390x-linux.h2
-rw-r--r--include/vki/vki-scnums-solaris.h371
-rw-r--r--include/vki/vki-scnums-tilegx-linux.h2
-rw-r--r--include/vki/vki-scnums-x86-linux.h2
-rw-r--r--include/vki/vki-solaris-repcache.h333
-rw-r--r--include/vki/vki-solaris.h1646
-rw-r--r--include/vki/vki-tilegx-linux.h2
-rw-r--r--include/vki/vki-x86-linux.h9
-rw-r--r--include/vki/vki-xen-domctl.h142
-rw-r--r--include/vki/vki-xen-evtchn.h27
-rw-r--r--include/vki/vki-xen-gnttab.h27
-rw-r--r--include/vki/vki-xen-hvm.h44
-rw-r--r--include/vki/vki-xen-memory.h28
-rw-r--r--include/vki/vki-xen-mmuext.h27
-rw-r--r--include/vki/vki-xen-physdev.h (renamed from coregrind/pub_core_debugger.h)52
-rw-r--r--include/vki/vki-xen-schedop.h50
-rw-r--r--include/vki/vki-xen-sysctl.h11
-rw-r--r--include/vki/vki-xen-tmem.h27
-rw-r--r--include/vki/vki-xen-version.h27
-rw-r--r--include/vki/vki-xen-x86.h27
-rw-r--r--include/vki/vki-xen-xsm.h95
-rw-r--r--include/vki/vki-xen.h30
-rw-r--r--lackey/lk_main.c4
-rw-r--r--massif/ms_main.c17
-rwxr-xr-xmassif/ms_print.in4
-rwxr-xr-xmassif/tests/filter_verbose3
-rw-r--r--massif/tests/malloc_usable.c2
-rw-r--r--memcheck/docs/mc-manual.xml131
-rw-r--r--memcheck/mc_errors.c24
-rw-r--r--memcheck/mc_include.h154
-rw-r--r--memcheck/mc_leakcheck.c264
-rw-r--r--memcheck/mc_machine.c2
-rw-r--r--memcheck/mc_main.c1245
-rw-r--r--memcheck/mc_malloc_wrappers.c22
-rw-r--r--memcheck/mc_replace_strmem.c2
-rw-r--r--memcheck/mc_translate.c86
-rw-r--r--memcheck/memcheck.h2
-rw-r--r--memcheck/tests/Makefile.am66
-rwxr-xr-xmemcheck/tests/amd64-linux/filter_defcfaexpr6
-rw-r--r--memcheck/tests/amd64-solaris/Makefile.am25
-rw-r--r--memcheck/tests/amd64-solaris/context_fpu.c109
-rw-r--r--memcheck/tests/amd64-solaris/context_fpu.stderr.exp96
-rw-r--r--memcheck/tests/amd64-solaris/context_fpu.stdout.exp4
-rw-r--r--memcheck/tests/amd64-solaris/context_fpu.vgtest2
-rw-r--r--memcheck/tests/amd64-solaris/context_gpr.c95
-rw-r--r--memcheck/tests/amd64-solaris/context_gpr.stderr.exp18
-rw-r--r--memcheck/tests/amd64-solaris/context_gpr.stdout.exp4
-rw-r--r--memcheck/tests/amd64-solaris/context_gpr.vgtest2
-rw-r--r--memcheck/tests/amd64-solaris/context_rflags.c67
-rw-r--r--memcheck/tests/amd64-solaris/context_rflags.stderr.exp (renamed from none/tests/scripts/shell_nointerp2.stderr.exp)0
-rw-r--r--memcheck/tests/amd64-solaris/context_rflags.stdout.exp4
-rw-r--r--memcheck/tests/amd64-solaris/context_rflags.vgtest2
-rw-r--r--memcheck/tests/amd64-solaris/context_rflags2.c90
-rw-r--r--memcheck/tests/amd64-solaris/context_rflags2.stderr.exp12
-rw-r--r--memcheck/tests/amd64-solaris/context_rflags2.stdout.exp (renamed from none/tests/scripts/shell_nointerp3.stderr.exp)0
-rw-r--r--memcheck/tests/amd64-solaris/context_rflags2.vgtest2
-rw-r--r--memcheck/tests/amd64-solaris/context_sse.c100
-rw-r--r--memcheck/tests/amd64-solaris/context_sse.stderr.exp96
-rw-r--r--memcheck/tests/amd64-solaris/context_sse.stdout.exp4
-rw-r--r--memcheck/tests/amd64-solaris/context_sse.vgtest2
-rwxr-xr-xmemcheck/tests/amd64-solaris/filter_stderr3
-rw-r--r--memcheck/tests/amd64-solaris/ldsoexec.c3
-rw-r--r--memcheck/tests/amd64-solaris/ldsoexec.stderr.exp0
-rw-r--r--memcheck/tests/amd64-solaris/ldsoexec.vgtest2
-rw-r--r--memcheck/tests/amd64/Makefile.am9
-rw-r--r--memcheck/tests/amd64/bt_everything.c20
-rw-r--r--memcheck/tests/amd64/bt_everything.stdout.exp4
-rw-r--r--memcheck/tests/amd64/fxsave-amd64.c6
-rw-r--r--memcheck/tests/amd64/xsave-avx.c337
-rw-r--r--memcheck/tests/amd64/xsave-avx.stderr.exp3890
-rw-r--r--memcheck/tests/amd64/xsave-avx.stdout.exp0
-rw-r--r--memcheck/tests/amd64/xsave-avx.vgtest4
-rw-r--r--memcheck/tests/badjump2.c2
-rw-r--r--memcheck/tests/big_blocks_freed_list.stderr.exp18
-rw-r--r--memcheck/tests/bug340392.c26
-rw-r--r--memcheck/tests/bug340392.stderr.exp0
-rw-r--r--memcheck/tests/bug340392.vgtest10
-rw-r--r--memcheck/tests/clo_redzone.c4
-rw-r--r--memcheck/tests/cond_ld.vgtest2
-rw-r--r--memcheck/tests/cond_st.vgtest2
-rw-r--r--memcheck/tests/custom_alloc.vgtest2
-rw-r--r--memcheck/tests/darwin/aio.c1
-rw-r--r--memcheck/tests/darwin/aio.stderr.exp8
-rw-r--r--memcheck/tests/darwin/scalar.c4
-rw-r--r--memcheck/tests/darwin/scalar.stderr.exp218
-rw-r--r--memcheck/tests/deep-backtrace.vgtest1
-rw-r--r--memcheck/tests/demangle.stderr.exp11
-rw-r--r--memcheck/tests/demangle.vgtest1
-rw-r--r--memcheck/tests/doublefree.stderr.exp3
-rw-r--r--memcheck/tests/dw4.c4
-rw-r--r--memcheck/tests/dw4.stderr.exp-solaris49
-rw-r--r--memcheck/tests/err_disable1.stderr.exp12
-rw-r--r--memcheck/tests/err_disable2.stderr.exp3
-rw-r--r--memcheck/tests/err_disable3.stderr.exp6
-rw-r--r--memcheck/tests/err_disable4.stderr.exp3
-rw-r--r--memcheck/tests/err_disable_arange1.stderr.exp10
-rw-r--r--memcheck/tests/err_disable_arange1.vgtest2
-rw-r--r--memcheck/tests/execve2.c6
-rw-r--r--memcheck/tests/execve2.stderr.exp2
-rw-r--r--memcheck/tests/file_locking.c4
-rw-r--r--memcheck/tests/fprw.c2
-rw-r--r--memcheck/tests/fprw.vgtest2
-rw-r--r--memcheck/tests/leak-segv-jmp.c114
-rw-r--r--memcheck/tests/leak-segv-jmp.stderr.exp43
-rw-r--r--memcheck/tests/leak-segv-jmp.vgtest2
-rw-r--r--memcheck/tests/leak_cpp_interior.cpp5
-rw-r--r--memcheck/tests/leak_cpp_interior.stderr.exp4
-rw-r--r--memcheck/tests/leak_cpp_interior.stderr.exp-64bit4
-rw-r--r--memcheck/tests/linux/getregset.vgtest2
-rw-r--r--memcheck/tests/linux/proc-auxv.vgtest2
-rw-r--r--memcheck/tests/long_namespace_xml.cpp4
-rw-r--r--memcheck/tests/malloc1.stderr.exp4
-rw-r--r--memcheck/tests/malloc2.c17
-rw-r--r--memcheck/tests/malloc2.stderr.exp18
-rw-r--r--memcheck/tests/malloc_usable.c2
-rw-r--r--memcheck/tests/memalign_test.stderr.exp4
-rw-r--r--memcheck/tests/noisy_child.stderr.exp6
-rw-r--r--memcheck/tests/partial_load_dflt.stderr.exp8
-rw-r--r--memcheck/tests/partial_load_dflt.stderr.exp648
-rw-r--r--memcheck/tests/partial_load_dflt.vgtest1
-rw-r--r--memcheck/tests/partial_load_ok.vgtest2
-rw-r--r--memcheck/tests/post-syscall.c2
-rw-r--r--memcheck/tests/ppc32/power_ISA2_07.vgtest4
-rw-r--r--memcheck/tests/ppc64/power_ISA2_07.vgtest2
-rw-r--r--memcheck/tests/sbfragment.c2
-rw-r--r--memcheck/tests/sendmsg.c3
-rw-r--r--memcheck/tests/sendmsg.stderr.exp4
-rw-r--r--memcheck/tests/sendmsg.stderr.exp-solaris8
-rw-r--r--memcheck/tests/sh-mem-random.c15
-rw-r--r--memcheck/tests/sigaltstack.c9
-rw-r--r--memcheck/tests/sigkill.stderr.exp-solaris197
-rw-r--r--memcheck/tests/solaris/Makefile.am173
-rw-r--r--memcheck/tests/solaris/brk.c83
-rw-r--r--memcheck/tests/solaris/brk.stderr.exp11
-rw-r--r--memcheck/tests/solaris/brk.stdout.exp0
-rw-r--r--memcheck/tests/solaris/brk.vgtest2
-rw-r--r--memcheck/tests/solaris/context_stack_die.c43
-rw-r--r--memcheck/tests/solaris/context_stack_die.stderr.exp5
-rw-r--r--memcheck/tests/solaris/context_stack_die.stdout.exp0
-rw-r--r--memcheck/tests/solaris/context_stack_die.vgtest2
-rw-r--r--memcheck/tests/solaris/door_data.c208
-rw-r--r--memcheck/tests/solaris/door_data.stderr.exp0
-rw-r--r--memcheck/tests/solaris/door_data.stdout.exp2
-rw-r--r--memcheck/tests/solaris/door_data.vgtest2
-rw-r--r--memcheck/tests/solaris/door_kill.c102
-rw-r--r--memcheck/tests/solaris/door_kill.stderr.exp0
-rw-r--r--memcheck/tests/solaris/door_kill.stdout.exp1
-rw-r--r--memcheck/tests/solaris/door_kill.vgtest2
-rw-r--r--memcheck/tests/solaris/execx.c58
-rw-r--r--memcheck/tests/solaris/execx.stderr.exp4
-rw-r--r--memcheck/tests/solaris/execx.stdout.exp1
-rw-r--r--memcheck/tests/solaris/execx.vgtest3
-rwxr-xr-xmemcheck/tests/solaris/filter_ldynsym7
-rwxr-xr-xmemcheck/tests/solaris/filter_name_service_door8
-rwxr-xr-xmemcheck/tests/solaris/filter_scalar15
-rwxr-xr-xmemcheck/tests/solaris/filter_sendfilev7
-rwxr-xr-xmemcheck/tests/solaris/filter_stderr3
-rwxr-xr-xmemcheck/tests/solaris/filter_syscall_at8
-rw-r--r--memcheck/tests/solaris/gethrtime.c39
-rw-r--r--memcheck/tests/solaris/gethrtime.stderr.exp0
-rw-r--r--memcheck/tests/solaris/gethrtime.stdout.exp1
-rw-r--r--memcheck/tests/solaris/gethrtime.vgtest2
-rw-r--r--memcheck/tests/solaris/gethrusec.c24
-rw-r--r--memcheck/tests/solaris/gethrusec.stderr.exp0
-rw-r--r--memcheck/tests/solaris/gethrusec.stdout.exp3
-rw-r--r--memcheck/tests/solaris/gethrusec.vgtest3
-rw-r--r--memcheck/tests/solaris/getzoneoffset.c30
-rw-r--r--memcheck/tests/solaris/getzoneoffset.stderr.exp0
-rw-r--r--memcheck/tests/solaris/getzoneoffset.vgtest3
-rw-r--r--memcheck/tests/solaris/inlinfo.c11
-rw-r--r--memcheck/tests/solaris/inlinfo_nested.c78
-rw-r--r--memcheck/tests/solaris/ioctl.c91
-rw-r--r--memcheck/tests/solaris/ioctl.stderr.exp8
-rw-r--r--memcheck/tests/solaris/ioctl.stdout.exp0
-rw-r--r--memcheck/tests/solaris/ioctl.vgtest2
-rw-r--r--memcheck/tests/solaris/ldynsym.c29
-rw-r--r--memcheck/tests/solaris/ldynsym.stderr.exp7
-rw-r--r--memcheck/tests/solaris/ldynsym.stdout.exp0
-rw-r--r--memcheck/tests/solaris/ldynsym.vgtest3
-rw-r--r--memcheck/tests/solaris/lsframe1.c23
-rw-r--r--memcheck/tests/solaris/lsframe1.stderr.exp0
-rw-r--r--memcheck/tests/solaris/lsframe1.stdout.exp2
-rw-r--r--memcheck/tests/solaris/lsframe1.vgtest3
-rw-r--r--memcheck/tests/solaris/lsframe2.c31
-rw-r--r--memcheck/tests/solaris/lsframe2.stderr.exp0
-rw-r--r--memcheck/tests/solaris/lsframe2.stdout.exp2
-rw-r--r--memcheck/tests/solaris/lsframe2.vgtest3
-rw-r--r--memcheck/tests/solaris/mmapobj_bssonly.c9
-rw-r--r--memcheck/tests/solaris/mmapobj_bssonly.stderr.exp0
-rw-r--r--memcheck/tests/solaris/mmapobj_bssonly.stdout.exp1
-rw-r--r--memcheck/tests/solaris/mmapobj_bssonly.vgtest2
-rw-r--r--memcheck/tests/solaris/mmapobj_bssonly_lib.c3
-rw-r--r--memcheck/tests/solaris/name_service_door.c272
-rw-r--r--memcheck/tests/solaris/name_service_door.stderr.exp-amd64146
-rw-r--r--memcheck/tests/solaris/name_service_door.stderr.exp-x86136
-rw-r--r--memcheck/tests/solaris/name_service_door.stdout.exp13
-rw-r--r--memcheck/tests/solaris/name_service_door.vgtest7
-rw-r--r--memcheck/tests/solaris/pkcs11.c64
-rw-r--r--memcheck/tests/solaris/pkcs11.stderr.exp-illumos6
-rw-r--r--memcheck/tests/solaris/pkcs11.stderr.exp-solaris0
-rw-r--r--memcheck/tests/solaris/pkcs11.stdout.exp0
-rw-r--r--memcheck/tests/solaris/pkcs11.vgtest3
-rw-r--r--memcheck/tests/solaris/scalar.c2532
-rw-r--r--memcheck/tests/solaris/scalar.h38
-rw-r--r--memcheck/tests/solaris/scalar.stderr.exp5366
-rw-r--r--memcheck/tests/solaris/scalar.stdout.exp0
-rw-r--r--memcheck/tests/solaris/scalar.vgtest10
-rw-r--r--memcheck/tests/solaris/scalar_frealpathat.c17
-rw-r--r--memcheck/tests/solaris/scalar_frealpathat.stderr.exp23
-rw-r--r--memcheck/tests/solaris/scalar_frealpathat.stdout.exp0
-rw-r--r--memcheck/tests/solaris/scalar_frealpathat.vgtest4
-rw-r--r--memcheck/tests/solaris/scalar_ioctl.c516
-rw-r--r--memcheck/tests/solaris/scalar_ioctl.stderr.exp849
-rw-r--r--memcheck/tests/solaris/scalar_ioctl.stdout.exp0
-rw-r--r--memcheck/tests/solaris/scalar_ioctl.vgtest4
-rw-r--r--memcheck/tests/solaris/scalar_lwp_kill.c20
-rw-r--r--memcheck/tests/solaris/scalar_lwp_kill.stderr.exp9
-rw-r--r--memcheck/tests/solaris/scalar_lwp_kill.stdout.exp0
-rw-r--r--memcheck/tests/solaris/scalar_lwp_kill.vgtest4
-rw-r--r--memcheck/tests/solaris/scalar_lwp_name.c31
-rw-r--r--memcheck/tests/solaris/scalar_lwp_name.stderr.exp35
-rw-r--r--memcheck/tests/solaris/scalar_lwp_name.stdout.exp0
-rw-r--r--memcheck/tests/solaris/scalar_lwp_name.vgtest4
-rw-r--r--memcheck/tests/solaris/scalar_lwp_sigqueue.c19
-rw-r--r--memcheck/tests/solaris/scalar_lwp_sigqueue.stderr.exp22
-rw-r--r--memcheck/tests/solaris/scalar_lwp_sigqueue.stdout.exp0
-rw-r--r--memcheck/tests/solaris/scalar_lwp_sigqueue.vgtest4
-rw-r--r--memcheck/tests/solaris/scalar_lwp_sigqueue_pid.c19
-rw-r--r--memcheck/tests/solaris/scalar_lwp_sigqueue_pid.stderr.exp25
-rw-r--r--memcheck/tests/solaris/scalar_lwp_sigqueue_pid.vgtest4
-rw-r--r--memcheck/tests/solaris/scalar_obsolete.c113
-rw-r--r--memcheck/tests/solaris/scalar_obsolete.stderr.exp259
-rw-r--r--memcheck/tests/solaris/scalar_obsolete.stdout.exp0
-rw-r--r--memcheck/tests/solaris/scalar_obsolete.vgtest4
-rw-r--r--memcheck/tests/solaris/scalar_shm_new.c50
-rw-r--r--memcheck/tests/solaris/scalar_shm_new.stderr.exp75
-rw-r--r--memcheck/tests/solaris/scalar_shm_new.stdout.exp0
-rw-r--r--memcheck/tests/solaris/scalar_shm_new.vgtest4
-rw-r--r--memcheck/tests/solaris/scalar_spawn.c72
-rw-r--r--memcheck/tests/solaris/scalar_spawn.stderr.exp166
-rw-r--r--memcheck/tests/solaris/scalar_spawn.stdout.exp0
-rw-r--r--memcheck/tests/solaris/scalar_spawn.vgtest6
-rw-r--r--memcheck/tests/solaris/scalar_system_stats.c18
-rw-r--r--memcheck/tests/solaris/scalar_system_stats.stderr.exp6
-rw-r--r--memcheck/tests/solaris/scalar_system_stats.stdout.exp0
-rw-r--r--memcheck/tests/solaris/scalar_system_stats.vgtest4
-rw-r--r--memcheck/tests/solaris/scalar_tsol_clearance.c75
-rw-r--r--memcheck/tests/solaris/scalar_tsol_clearance.stderr.exp38
-rw-r--r--memcheck/tests/solaris/scalar_tsol_clearance.vgtest4
-rw-r--r--memcheck/tests/solaris/scalar_utimensat.c31
-rw-r--r--memcheck/tests/solaris/scalar_utimensat.stderr.exp38
-rw-r--r--memcheck/tests/solaris/scalar_utimensat.stdout.exp0
-rw-r--r--memcheck/tests/solaris/scalar_utimensat.vgtest4
-rw-r--r--memcheck/tests/solaris/scalar_utimesys.c49
-rw-r--r--memcheck/tests/solaris/scalar_utimesys.stderr.exp72
-rw-r--r--memcheck/tests/solaris/scalar_utimesys.stdout.exp0
-rw-r--r--memcheck/tests/solaris/scalar_utimesys.vgtest4
-rw-r--r--memcheck/tests/solaris/scalar_uuidsys.c17
-rw-r--r--memcheck/tests/solaris/scalar_uuidsys.stderr.exp10
-rw-r--r--memcheck/tests/solaris/scalar_uuidsys.stdout.exp0
-rw-r--r--memcheck/tests/solaris/scalar_uuidsys.vgtest4
-rw-r--r--memcheck/tests/solaris/scalar_zone_defunct.c44
-rw-r--r--memcheck/tests/solaris/scalar_zone_defunct.stderr.exp55
-rw-r--r--memcheck/tests/solaris/scalar_zone_defunct.stdout.exp0
-rw-r--r--memcheck/tests/solaris/scalar_zone_defunct.vgtest4
-rw-r--r--memcheck/tests/solaris/sendfilev.c88
-rw-r--r--memcheck/tests/solaris/sendfilev.stderr.exp11
-rw-r--r--memcheck/tests/solaris/sendfilev.stdout.exp4
-rw-r--r--memcheck/tests/solaris/sendfilev.vgtest4
-rw-r--r--memcheck/tests/solaris/shmat.c44
-rw-r--r--memcheck/tests/solaris/shmat.stderr.exp0
-rw-r--r--memcheck/tests/solaris/shmat.stdout.exp1
-rw-r--r--memcheck/tests/solaris/shmat.vgtest2
-rw-r--r--memcheck/tests/solaris/spawn.c112
-rw-r--r--memcheck/tests/solaris/spawn.stderr.exp0
-rw-r--r--memcheck/tests/solaris/spawn.stdout.exp2
-rw-r--r--memcheck/tests/solaris/spawn.vgtest3
-rw-r--r--memcheck/tests/solaris/strlcpy.c47
-rw-r--r--memcheck/tests/solaris/strlcpy.stderr.exp11
-rw-r--r--memcheck/tests/solaris/strlcpy.stdout.exp0
-rw-r--r--memcheck/tests/solaris/strlcpy.vgtest5
-rw-r--r--memcheck/tests/solaris/supponlyobj.stderr.exp8
-rw-r--r--memcheck/tests/solaris/supponlyobj.supp16
-rw-r--r--memcheck/tests/solaris/supponlyobj.vgtest4
-rw-r--r--memcheck/tests/solaris/syscall_at.c107
-rw-r--r--memcheck/tests/solaris/syscall_at.stderr.exp24
-rw-r--r--memcheck/tests/solaris/syscall_at.stdout.exp0
-rw-r--r--memcheck/tests/solaris/syscall_at.vgtest2
-rw-r--r--memcheck/tests/solaris/thr_daemon_exit_libc.c72
-rw-r--r--memcheck/tests/solaris/thr_daemon_exit_libc.stderr.exp0
-rw-r--r--memcheck/tests/solaris/thr_daemon_exit_libc.stdout.exp12
-rw-r--r--memcheck/tests/solaris/thr_daemon_exit_libc.vgtest2
-rw-r--r--memcheck/tests/solaris/thr_daemon_exit_standalone.c234
-rw-r--r--memcheck/tests/solaris/thr_daemon_exit_standalone.stderr.exp0
-rw-r--r--memcheck/tests/solaris/thr_daemon_exit_standalone.stdout.exp0
-rw-r--r--memcheck/tests/solaris/thr_daemon_exit_standalone.vgtest2
-rw-r--r--memcheck/tests/str_tester.c12
-rw-r--r--memcheck/tests/suppfree.stderr.exp3
-rw-r--r--memcheck/tests/supponlyobj.vgtest6
-rw-r--r--memcheck/tests/test-plo-no.vgtest2
-rw-r--r--memcheck/tests/test-plo-yes.vgtest4
-rw-r--r--memcheck/tests/thread_alloca.c2
-rw-r--r--memcheck/tests/threadname.c8
-rw-r--r--memcheck/tests/threadname.stderr.exp41
-rw-r--r--memcheck/tests/threadname_xml.stderr.exp6
-rw-r--r--memcheck/tests/unit_libcbase.c2
-rw-r--r--memcheck/tests/vbit-test/Makefile.am2
-rw-r--r--memcheck/tests/vbit-test/TODO3
-rw-r--r--memcheck/tests/vbit-test/binary.c40
-rw-r--r--memcheck/tests/vbit-test/irops.c64
-rw-r--r--memcheck/tests/vbit-test/main.c37
-rw-r--r--memcheck/tests/vbit-test/qernary.c24
-rw-r--r--memcheck/tests/vbit-test/ternary.c24
-rw-r--r--memcheck/tests/vbit-test/unary.c24
-rw-r--r--memcheck/tests/vbit-test/util.c910
-rw-r--r--memcheck/tests/vbit-test/valgrind.c24
-rw-r--r--memcheck/tests/vbit-test/vbits.c32
-rw-r--r--memcheck/tests/vbit-test/vbits.h24
-rw-r--r--memcheck/tests/vbit-test/vtest.h24
-rw-r--r--memcheck/tests/vcpu_fnfns.stdout.exp-solaris786
-rw-r--r--memcheck/tests/writev1.stderr.exp-solaris19
-rw-r--r--memcheck/tests/x86-linux/scalar.stderr.exp2
-rw-r--r--memcheck/tests/x86-solaris/Makefile.am32
-rw-r--r--memcheck/tests/x86-solaris/context_eflags.c71
-rw-r--r--memcheck/tests/x86-solaris/context_eflags.stderr.exp0
-rw-r--r--memcheck/tests/x86-solaris/context_eflags.stdout.exp4
-rw-r--r--memcheck/tests/x86-solaris/context_eflags.vgtest2
-rw-r--r--memcheck/tests/x86-solaris/context_eflags2.c80
-rw-r--r--memcheck/tests/x86-solaris/context_eflags2.stderr.exp12
-rw-r--r--memcheck/tests/x86-solaris/context_eflags2.stdout.exp0
-rw-r--r--memcheck/tests/x86-solaris/context_eflags2.vgtest2
-rw-r--r--memcheck/tests/x86-solaris/context_fpu.c116
-rw-r--r--memcheck/tests/x86-solaris/context_fpu.stderr.exp96
-rw-r--r--memcheck/tests/x86-solaris/context_fpu.stdout.exp4
-rw-r--r--memcheck/tests/x86-solaris/context_fpu.vgtest2
-rw-r--r--memcheck/tests/x86-solaris/context_gpr.c92
-rw-r--r--memcheck/tests/x86-solaris/context_gpr.stderr.exp18
-rw-r--r--memcheck/tests/x86-solaris/context_gpr.stdout.exp4
-rw-r--r--memcheck/tests/x86-solaris/context_gpr.vgtest2
-rw-r--r--memcheck/tests/x86-solaris/context_sse.c106
-rw-r--r--memcheck/tests/x86-solaris/context_sse.stderr.exp96
-rw-r--r--memcheck/tests/x86-solaris/context_sse.stdout.exp4
-rw-r--r--memcheck/tests/x86-solaris/context_sse.vgtest2
-rwxr-xr-xmemcheck/tests/x86-solaris/filter_stderr3
-rw-r--r--memcheck/tests/x86-solaris/ldsoexec.c3
-rw-r--r--memcheck/tests/x86-solaris/ldsoexec.stderr.exp0
-rw-r--r--memcheck/tests/x86-solaris/ldsoexec.vgtest2
-rw-r--r--memcheck/tests/x86-solaris/scalar.c116
-rw-r--r--memcheck/tests/x86-solaris/scalar.stderr.exp225
-rw-r--r--memcheck/tests/x86-solaris/scalar.stdout.exp0
-rw-r--r--memcheck/tests/x86-solaris/scalar.vgtest3
-rw-r--r--memcheck/tests/x86-solaris/scalar_obsolete.c49
-rw-r--r--memcheck/tests/x86-solaris/scalar_obsolete.stderr.exp76
-rw-r--r--memcheck/tests/x86-solaris/scalar_obsolete.stdout.exp0
-rw-r--r--memcheck/tests/x86-solaris/scalar_obsolete.vgtest4
-rw-r--r--memcheck/tests/x86/fprem.c6
-rw-r--r--memcheck/tests/x86/pushfpopf_s.S6
-rw-r--r--memcheck/tests/x86/tronical.S2
-rw-r--r--memcheck/tests/xml1.c10
-rw-r--r--memcheck/tests/xml1.stderr.exp-s390x-mvc1
-rw-r--r--memcheck/tests/xml1.vgtest2
-rw-r--r--mpi/Makefile.am4
-rw-r--r--mpi/libmpiwrap.c3
-rwxr-xr-xnightly/bin/nightly11
-rw-r--r--none/nl_main.c4
-rw-r--r--none/tests/Makefile.am60
-rw-r--r--none/tests/allexec.c12
-rw-r--r--none/tests/amd64-darwin/Makefile.am15
-rw-r--r--none/tests/amd64-darwin/bug341419.c223
-rw-r--r--none/tests/amd64-darwin/bug341419.stderr.exp1
-rw-r--r--none/tests/amd64-darwin/bug341419.vgtest3
-rwxr-xr-xnone/tests/amd64-darwin/filter_minimal (renamed from none/tests/amd64-linux/filter_minimal)0
-rwxr-xr-xnone/tests/amd64-darwin/filter_stderr11
-rw-r--r--none/tests/amd64-linux/Makefile.am7
-rw-r--r--none/tests/amd64-linux/bug345887.vgtest2
-rwxr-xr-xnone/tests/amd64-linux/filter_stderr9
-rw-r--r--none/tests/amd64-linux/map_32bits.c43
-rw-r--r--none/tests/amd64-linux/map_32bits.stderr.exp3
-rw-r--r--none/tests/amd64-linux/map_32bits.vgtest5
-rw-r--r--none/tests/amd64-solaris/Makefile.am24
-rw-r--r--none/tests/amd64-solaris/coredump_single_thread.c46
-rw-r--r--none/tests/amd64-solaris/coredump_single_thread.post.exp29
-rw-r--r--none/tests/amd64-solaris/coredump_single_thread.stderr.exp9
-rw-r--r--none/tests/amd64-solaris/coredump_single_thread.stdout.exp0
-rw-r--r--none/tests/amd64-solaris/coredump_single_thread.vgtest5
-rwxr-xr-xnone/tests/amd64-solaris/coredump_single_thread_mdb25
-rw-r--r--none/tests/amd64-solaris/coredump_single_thread_sse.c65
-rw-r--r--none/tests/amd64-solaris/coredump_single_thread_sse.post.exp23
-rw-r--r--none/tests/amd64-solaris/coredump_single_thread_sse.stderr.exp11
-rw-r--r--none/tests/amd64-solaris/coredump_single_thread_sse.stdout.exp0
-rw-r--r--none/tests/amd64-solaris/coredump_single_thread_sse.vgtest5
-rwxr-xr-xnone/tests/amd64-solaris/coredump_single_thread_sse_mdb15
-rwxr-xr-xnone/tests/amd64-solaris/filter_stderr3
-rw-r--r--none/tests/amd64-solaris/syscall_return_args.c63
-rw-r--r--none/tests/amd64-solaris/syscall_return_args.stderr.exp0
-rw-r--r--none/tests/amd64-solaris/syscall_return_args.vgtest2
-rw-r--r--none/tests/amd64/Makefile.am30
-rw-r--r--none/tests/amd64/amd64locked.c26
-rw-r--r--none/tests/amd64/amd64locked.stdout.exp2
-rw-r--r--none/tests/amd64/avx-1.c89
-rw-r--r--none/tests/amd64/avx-1.stdout.exp16351
-rw-r--r--none/tests/amd64/avx-1.vgtest2
-rw-r--r--none/tests/amd64/avx2-1.c60
-rw-r--r--none/tests/amd64/bug132918.vgtest1
-rw-r--r--none/tests/amd64/bug156404-amd64.c25
-rwxr-xr-xnone/tests/amd64/filter_inf_nan11
-rw-r--r--none/tests/amd64/fxtract.vgtest1
-rw-r--r--none/tests/amd64/getseg.c25
-rw-r--r--none/tests/amd64/getseg.stderr.exp0
-rw-r--r--none/tests/amd64/getseg.stdout.exp4
-rw-r--r--none/tests/amd64/getseg.vgtest2
-rw-r--r--none/tests/amd64/movbe.c4
-rw-r--r--none/tests/amd64/pcmpstr64.c179
-rw-r--r--none/tests/amd64/pcmpstr64.stdout.exp52
-rw-r--r--none/tests/amd64/redundantRexW.c17
-rw-r--r--none/tests/amd64/redundantRexW.stdout.exp26
-rw-r--r--none/tests/amd64/sse4-64.c27
-rw-r--r--none/tests/amd64/sse4-64.vgtest1
-rw-r--r--none/tests/amd64/xacq_xrel.c2
-rw-r--r--none/tests/amd64/xacq_xrel.stdout.exp2
-rw-r--r--none/tests/ansi.c1
-rw-r--r--none/tests/ansi.vgtest1
-rw-r--r--none/tests/arm/vcvt_fixed_float_VFP.c99
-rw-r--r--none/tests/arm/vcvt_fixed_float_VFP.stdout.exp102
-rw-r--r--none/tests/arm64/Makefile.am1
-rw-r--r--none/tests/arm64/fp_and_simd.c77
-rw-r--r--none/tests/arm64/memory.c28
-rw-r--r--none/tests/arm64/memory.stdout.exp361
-rw-r--r--none/tests/async-sigs.c16
-rw-r--r--none/tests/async-sigs.vgtest1
-rw-r--r--none/tests/cmdline1.stdout.exp17
-rw-r--r--none/tests/cmdline2.stdout.exp17
-rw-r--r--none/tests/coolo_sigaction.vgtest2
-rw-r--r--none/tests/darwin/Makefile.am2
-rw-r--r--none/tests/darwin/bug228343.c59
-rw-r--r--none/tests/darwin/bug228343.stderr.exp0
-rw-r--r--none/tests/darwin/bug228343.stdout.exp1
-rw-r--r--none/tests/darwin/bug228343.vgtest2
-rw-r--r--none/tests/exec-sigmask.c2
-rw-r--r--none/tests/exec-sigmask.stdout.exp-solaris1
-rw-r--r--none/tests/execve.c13
-rw-r--r--none/tests/faultstatus.c13
-rw-r--r--none/tests/fdleak_creat.c2
-rwxr-xr-xnone/tests/filter_fdleak2
-rw-r--r--none/tests/ioctl_moans.c2
-rw-r--r--none/tests/libvex_test.c8
-rw-r--r--none/tests/linux/Makefile.am3
-rw-r--r--none/tests/linux/blockfault.vgtest1
-rw-r--r--none/tests/linux/stack-overflow.vgtest1
-rw-r--r--none/tests/map_unmap.c2
-rw-r--r--none/tests/mips64/load_indexed_instructions.c16
-rw-r--r--none/tests/mips64/load_indexed_instructions.stdout.exp-BE31
-rw-r--r--none/tests/mips64/load_indexed_instructions.stdout.exp-LE31
-rw-r--r--none/tests/mmap_fcntl_bug.c2
-rw-r--r--none/tests/mq.c13
-rw-r--r--none/tests/ppc32/Makefile.am41
-rw-r--r--none/tests/ppc32/bug129390-ppc32.vgtest2
-rw-r--r--none/tests/ppc32/jm-vmx.vgtest2
-rw-r--r--none/tests/ppc32/jm_fp_isa_2_07.vgtest2
-rw-r--r--none/tests/ppc32/jm_int_isa_2_07.vgtest2
-rw-r--r--none/tests/ppc32/jm_vec_isa_2_07.vgtest2
-rw-r--r--none/tests/ppc32/testVMX.vgtest2
-rw-r--r--none/tests/ppc32/test_dfp1.vgtest2
-rw-r--r--none/tests/ppc32/test_dfp2.vgtest2
-rw-r--r--none/tests/ppc32/test_dfp3.vgtest2
-rw-r--r--none/tests/ppc32/test_dfp4.vgtest2
-rw-r--r--none/tests/ppc32/test_dfp5.vgtest2
-rw-r--r--none/tests/ppc32/test_isa_2_06_part1.vgtest2
-rw-r--r--none/tests/ppc32/test_isa_2_06_part2.vgtest2
-rw-r--r--none/tests/ppc32/test_isa_2_06_part3.vgtest2
-rw-r--r--none/tests/ppc32/test_isa_2_07_part2.vgtest2
-rw-r--r--none/tests/ppc32/test_tm.vgtest2
-rw-r--r--none/tests/ppc32/test_touch_tm.vgtest2
-rw-r--r--none/tests/ppc64/Makefile.am36
-rw-r--r--none/tests/ppc64/jm-vmx.vgtest2
-rw-r--r--none/tests/ppc64/jm_fp_isa_2_07.vgtest2
-rw-r--r--none/tests/ppc64/jm_int_isa_2_07.vgtest2
-rw-r--r--none/tests/ppc64/jm_vec_isa_2_07.vgtest2
-rw-r--r--none/tests/ppc64/test_dfp1.vgtest2
-rw-r--r--none/tests/ppc64/test_dfp2.vgtest2
-rw-r--r--none/tests/ppc64/test_dfp3.vgtest2
-rw-r--r--none/tests/ppc64/test_dfp4.vgtest2
-rw-r--r--none/tests/ppc64/test_dfp5.vgtest2
-rw-r--r--none/tests/ppc64/test_isa_2_06_part1.vgtest2
-rw-r--r--none/tests/ppc64/test_isa_2_06_part2.vgtest2
-rw-r--r--none/tests/ppc64/test_isa_2_06_part3.vgtest2
-rw-r--r--none/tests/ppc64/test_isa_2_07_part2.vgtest2
-rw-r--r--none/tests/ppc64/test_tm.c6
-rw-r--r--none/tests/ppc64/test_tm.vgtest2
-rw-r--r--none/tests/ppc64/test_touch_tm.c6
-rw-r--r--none/tests/ppc64/test_touch_tm.vgtest2
-rw-r--r--none/tests/procfs-cmdline-exe.c4
-rw-r--r--none/tests/procfs-non-linux.vgtest5
-rw-r--r--none/tests/pth_atfork1.c4
-rw-r--r--none/tests/require-text-symbol-2.stderr.exp-libcso19
-rw-r--r--none/tests/res_search.vgtest2
-rw-r--r--none/tests/resolv.vgtest3
-rw-r--r--none/tests/rlimit64_nofile.vgtest2
-rw-r--r--none/tests/s390x/Makefile.am10
-rw-r--r--none/tests/s390x/fixbr.c73
-rw-r--r--none/tests/s390x/fixbr.stderr.exp2
-rw-r--r--none/tests/s390x/fixbr.stdout.exp36
-rw-r--r--none/tests/s390x/fixbr.vgtest2
-rw-r--r--none/tests/s390x/fold_And16.c2
-rw-r--r--none/tests/s390x/fpext.c2
-rw-r--r--none/tests/s390x/fpext.vgtest2
-rw-r--r--none/tests/s390x/fpext_fail.stderr.exp2
-rw-r--r--none/tests/s390x/fpext_fail.vgtest2
-rw-r--r--none/tests/s390x/op00.vgtest1
-rw-r--r--none/tests/s390x/rounding-6.c38
-rw-r--r--none/tests/s390x/rounding-6.stdout.exp72
-rw-r--r--none/tests/scripts/Makefile.am18
-rwxr-xr-xnone/tests/scripts/bug3386064
-rw-r--r--none/tests/scripts/bug338606.stderr.exp1
-rw-r--r--none/tests/scripts/bug338606.vgtest7
-rwxr-xr-xnone/tests/scripts/nointerp1 (renamed from none/tests/scripts/shell_nointerp1)0
-rw-r--r--none/tests/scripts/nointerp1.stderr.exp0
-rw-r--r--none/tests/scripts/nointerp1.stdout.exp (renamed from none/tests/scripts/shell_nointerp1.stdout.exp)0
-rw-r--r--none/tests/scripts/nointerp1.vgtest2
-rwxr-xr-xnone/tests/scripts/nointerp2 (renamed from none/tests/scripts/shell_nointerp2)0
-rw-r--r--none/tests/scripts/nointerp2.stderr.exp0
-rw-r--r--none/tests/scripts/nointerp2.stdout.exp (renamed from none/tests/scripts/shell_nointerp2.stdout.exp)0
-rw-r--r--none/tests/scripts/nointerp2.vgtest2
-rwxr-xr-xnone/tests/scripts/nointerp3 (renamed from none/tests/scripts/shell_nointerp3)0
-rw-r--r--none/tests/scripts/nointerp3.stderr.exp0
-rw-r--r--none/tests/scripts/nointerp3.stdout.exp (renamed from none/tests/scripts/shell_nointerp3.stdout.exp)0
-rw-r--r--none/tests/scripts/nointerp3.vgtest2
-rwxr-xr-xnone/tests/scripts/nointerp41
-rw-r--r--none/tests/scripts/nointerp4.stderr.exp0
-rwxr-xr-xnone/tests/scripts/nointerp4.vgtest2
-rwxr-xr-xnone/tests/scripts/nointerp51
-rw-r--r--none/tests/scripts/nointerp5.stderr.exp0
-rwxr-xr-xnone/tests/scripts/nointerp5.vgtest2
-rwxr-xr-xnone/tests/scripts/relative11
-rw-r--r--none/tests/scripts/relative1.stderr.exp0
-rw-r--r--none/tests/scripts/relative1.stdout.exp1
-rw-r--r--none/tests/scripts/relative1.vgtest2
-rwxr-xr-xnone/tests/scripts/relative21
-rw-r--r--none/tests/scripts/relative2.stderr.exp0
-rw-r--r--none/tests/scripts/relative2.stdout.exp1
-rw-r--r--none/tests/scripts/relative2.vgtest2
-rwxr-xr-xnone/tests/scripts/say-hello.helper2
-rwxr-xr-xnone/tests/scripts/shell4
-rw-r--r--none/tests/scripts/shell.stderr.exp-illumos8
-rw-r--r--none/tests/scripts/shell.stderr.exp-solaris8
-rw-r--r--none/tests/scripts/shell.stderr.exp-solaris-spawn6
-rw-r--r--none/tests/scripts/shell_nointerp1.vgtest2
-rw-r--r--none/tests/scripts/shell_nointerp2.vgtest2
-rw-r--r--none/tests/scripts/shell_nointerp3.vgtest2
-rw-r--r--none/tests/solaris/Makefile.am72
-rw-r--r--none/tests/solaris/block_all_signals.c64
-rw-r--r--none/tests/solaris/block_all_signals.stderr.exp12
-rw-r--r--none/tests/solaris/block_all_signals.stdout.exp1
-rw-r--r--none/tests/solaris/block_all_signals.vgtest4
-rw-r--r--none/tests/solaris/blockfault.c33
-rw-r--r--none/tests/solaris/blockfault.stderr.exp11
-rw-r--r--none/tests/solaris/blockfault.vgtest2
-rw-r--r--none/tests/solaris/context_link.c38
-rw-r--r--none/tests/solaris/context_link.stderr.exp0
-rw-r--r--none/tests/solaris/context_link.stdout.exp1
-rw-r--r--none/tests/solaris/context_link.vgtest2
-rw-r--r--none/tests/solaris/context_link2.c48
-rw-r--r--none/tests/solaris/context_link2.stderr.exp0
-rw-r--r--none/tests/solaris/context_link2.stdout.exp0
-rw-r--r--none/tests/solaris/context_link2.vgtest2
-rw-r--r--none/tests/solaris/context_null.c15
-rw-r--r--none/tests/solaris/context_null.stderr.exp0
-rw-r--r--none/tests/solaris/context_null.stdout.exp0
-rw-r--r--none/tests/solaris/context_null.vgtest2
-rw-r--r--none/tests/solaris/context_stack.c72
-rw-r--r--none/tests/solaris/context_stack.stderr.exp0
-rw-r--r--none/tests/solaris/context_stack.stdout.exp0
-rw-r--r--none/tests/solaris/context_stack.vgtest2
-rw-r--r--none/tests/solaris/coredump_many_segments.c234
-rw-r--r--none/tests/solaris/coredump_many_threads.c100
-rw-r--r--none/tests/solaris/coredump_many_threads.post.exp59
-rw-r--r--none/tests/solaris/coredump_many_threads.stderr.exp11
-rw-r--r--none/tests/solaris/coredump_many_threads.vgtest6
-rwxr-xr-xnone/tests/solaris/filter_coredump_many_threads_post18
-rwxr-xr-xnone/tests/solaris/filter_coredump_many_threads_stderr7
-rwxr-xr-xnone/tests/solaris/filter_stderr3
-rw-r--r--none/tests/solaris/mmap_noreserve.c90
-rw-r--r--none/tests/solaris/mmap_noreserve.stderr.exp0
-rw-r--r--none/tests/solaris/mmap_noreserve.stdout.exp2
-rw-r--r--none/tests/solaris/mmap_noreserve.vgtest3
-rw-r--r--none/tests/solaris/posix_spawn.c54
-rw-r--r--none/tests/solaris/posix_spawn.stderr.exp1
-rw-r--r--none/tests/solaris/posix_spawn.stdout.exp0
-rw-r--r--none/tests/solaris/posix_spawn.vgtest2
-rw-r--r--none/tests/solaris/proc-cmdline-exe.stderr.exp-with-cmdline10
-rw-r--r--none/tests/solaris/proc-cmdline-exe.stderr.exp-without-cmdline10
-rw-r--r--none/tests/solaris/proc-cmdline-exe.vgtest3
-rw-r--r--none/tests/solaris/proc_aout.c71
-rw-r--r--none/tests/solaris/proc_aout.stderr.exp0
-rw-r--r--none/tests/solaris/proc_aout.stdout.exp4
-rw-r--r--none/tests/solaris/proc_aout.vgtest2
-rw-r--r--none/tests/solaris/proc_auxv.c91
-rw-r--r--none/tests/solaris/proc_auxv.stderr.exp0
-rw-r--r--none/tests/solaris/proc_auxv.stdout.exp0
-rw-r--r--none/tests/solaris/proc_auxv.vgtest2
-rw-r--r--none/tests/solaris/proc_auxv_multiple.c91
-rw-r--r--none/tests/solaris/proc_auxv_multiple.stderr.exp0
-rw-r--r--none/tests/solaris/proc_auxv_multiple.stdout.exp0
-rw-r--r--none/tests/solaris/proc_auxv_multiple.vgtest2
-rw-r--r--none/tests/solaris/proc_psinfo.c69
-rw-r--r--none/tests/solaris/proc_psinfo.stderr.exp2
-rw-r--r--none/tests/solaris/proc_psinfo.stdout.exp35
-rw-r--r--none/tests/solaris/proc_psinfo.vgtest2
-rw-r--r--none/tests/solaris/pthread-stack.c104
-rw-r--r--none/tests/solaris/pthread-stack.stderr.exp2
-rw-r--r--none/tests/solaris/pthread-stack.vgtest2
-rw-r--r--none/tests/solaris/reserve_sysstat_addr.c3
-rw-r--r--none/tests/solaris/reserve_sysstat_addr.map7
-rw-r--r--none/tests/solaris/reserve_sysstat_addr.stderr.exp14
-rw-r--r--none/tests/solaris/reserve_sysstat_addr.vgtest3
-rw-r--r--none/tests/solaris/reserve_sysstat_zone_addr.c3
-rw-r--r--none/tests/solaris/reserve_sysstat_zone_addr.map7
-rw-r--r--none/tests/solaris/reserve_sysstat_zone_addr.stderr.exp14
-rw-r--r--none/tests/solaris/reserve_sysstat_zone_addr.vgtest3
-rw-r--r--none/tests/solaris/resolv.c20
-rw-r--r--none/tests/solaris/resolv.stderr.exp2
-rw-r--r--none/tests/solaris/resolv.stdout.exp2
-rw-r--r--none/tests/solaris/resolv.vgtest1
-rw-r--r--none/tests/solaris/sigresend.c73
-rw-r--r--none/tests/solaris/sigresend.stderr.exp0
-rw-r--r--none/tests/solaris/sigresend.stdout.exp1
-rw-r--r--none/tests/solaris/sigresend.vgtest2
-rw-r--r--none/tests/solaris/stack-overflow.c5
-rw-r--r--none/tests/solaris/stack-overflow.stderr.exp13
-rw-r--r--none/tests/solaris/stack-overflow.vgtest1
-rw-r--r--none/tests/solaris/stack_prot.c65
-rw-r--r--none/tests/solaris/stack_prot.stderr.exp0
-rw-r--r--none/tests/solaris/stack_prot.stdout.exp0
-rw-r--r--none/tests/solaris/stack_prot.vgtest2
-rw-r--r--none/tests/solaris/threads_exitall.c39
-rw-r--r--none/tests/solaris/threads_exitall.stderr.exp0
-rw-r--r--none/tests/solaris/threads_exitall.stdout.exp0
-rw-r--r--none/tests/solaris/threads_exitall.vgtest2
-rw-r--r--none/tests/threadederrno.c14
-rw-r--r--none/tests/tilegx/Makefile.am1610
-rw-r--r--none/tests/tilegx/filter_stderr4
-rw-r--r--none/tests/tilegx/gen_insn_test.c711
-rwxr-xr-xnone/tests/tilegx/gen_test.sh600
-rw-r--r--none/tests/x86-darwin/Makefile.am17
-rw-r--r--none/tests/x86-darwin/bug341419.c203
-rw-r--r--none/tests/x86-darwin/bug341419.stderr.exp1
-rw-r--r--none/tests/x86-darwin/bug341419.vgtest3
-rw-r--r--none/tests/x86-darwin/bug350062.c16
-rw-r--r--none/tests/x86-darwin/bug350062.stderr.exp1
-rw-r--r--none/tests/x86-darwin/bug350062.vgtest3
-rwxr-xr-xnone/tests/x86-darwin/filter_stderr11
-rw-r--r--none/tests/x86-linux/Makefile.am2
-rw-r--r--none/tests/x86-linux/bug345887.vgtest2
-rwxr-xr-xnone/tests/x86-linux/filter_minimal20
-rw-r--r--none/tests/x86-linux/hang.vgtest1
-rw-r--r--none/tests/x86-linux/seg_override.c3
-rw-r--r--none/tests/x86-solaris/Makefile.am25
-rw-r--r--none/tests/x86-solaris/coredump_single_thread.c52
-rw-r--r--none/tests/x86-solaris/coredump_single_thread.post.exp27
-rw-r--r--none/tests/x86-solaris/coredump_single_thread.stderr.exp9
-rw-r--r--none/tests/x86-solaris/coredump_single_thread.stdout.exp0
-rw-r--r--none/tests/x86-solaris/coredump_single_thread.vgtest5
-rwxr-xr-xnone/tests/x86-solaris/coredump_single_thread_mdb22
-rw-r--r--none/tests/x86-solaris/coredump_single_thread_sse.c73
-rw-r--r--none/tests/x86-solaris/coredump_single_thread_sse.post.exp15
-rw-r--r--none/tests/x86-solaris/coredump_single_thread_sse.stderr.exp11
-rw-r--r--none/tests/x86-solaris/coredump_single_thread_sse.stdout.exp0
-rw-r--r--none/tests/x86-solaris/coredump_single_thread_sse.vgtest5
-rwxr-xr-xnone/tests/x86-solaris/coredump_single_thread_sse_mdb15
-rwxr-xr-xnone/tests/x86-solaris/filter_stderr3
-rw-r--r--none/tests/x86-solaris/syscalls.c59
-rw-r--r--none/tests/x86-solaris/syscalls.stderr.exp0
-rw-r--r--none/tests/x86-solaris/syscalls.stdout.exp0
-rw-r--r--none/tests/x86-solaris/syscalls.vgtest2
-rw-r--r--none/tests/x86/Makefile.am43
-rw-r--r--none/tests/x86/badseg.stdout.exp-solaris1
-rw-r--r--none/tests/x86/bt_everything.c19
-rw-r--r--none/tests/x86/bt_everything.stdout.exp4
-rw-r--r--none/tests/x86/cpuid_s.S2
-rwxr-xr-xnone/tests/x86/filter_inf_nan10
-rw-r--r--none/tests/x86/fxtract.vgtest1
-rw-r--r--none/tests/x86/insn_sse.vgtest2
-rw-r--r--none/tests/x86/insn_sse2.vgtest2
-rw-r--r--none/tests/x86/insn_sse3.vgtest2
-rw-r--r--none/tests/x86/movbe.c4
-rw-r--r--none/tests/x86/x86locked.c22
-rw-r--r--none/tests/x86/x86locked.stdout.exp2
-rw-r--r--perf/Makefile.am6
-rw-r--r--perf/bigcode.c13
-rw-r--r--perf/bigcode1.vgperf1
-rw-r--r--perf/bigcode2.vgperf1
-rw-r--r--perf/tinycc.c12
-rw-r--r--perf/vg_perf.in2
-rw-r--r--shared/vg_replace_strmem.c172
-rw-r--r--solaris/Makefile.am9
-rwxr-xr-xsolaris/build_solaris_package205
-rw-r--r--solaris/gdb-sol-thread.patch13
-rw-r--r--solaris/valgrind.p5m153
-rw-r--r--solaris/vgpreload-solaris.mapfile19
-rw-r--r--solaris11.supp43
-rw-r--r--solaris12.supp168
-rw-r--r--tests/Makefile.am29
-rw-r--r--tests/arch_test.c6
-rwxr-xr-xtests/check_dfp_cap10
-rwxr-xr-xtests/check_headers_and_includes45
-rwxr-xr-xtests/check_isa-2_06_cap12
-rwxr-xr-xtests/check_isa-2_07_cap12
-rwxr-xr-xtests/check_ppc64_auxv_cap44
-rwxr-xr-xtests/check_vmx_cap11
-rwxr-xr-xtests/filter_libc11
-rwxr-xr-xtests/filter_stderr_basic12
-rw-r--r--tests/malloc.h36
-rw-r--r--tests/min_power_isa.c65
-rw-r--r--tests/os_test.c4
-rw-r--r--tests/platform_test1
-rwxr-xr-xtests/vg_regtest.in22
1390 files changed, 78734 insertions, 15944 deletions
diff --git a/Android.mk b/Android.mk
index bf265cb37..98c47e5f9 100644
--- a/Android.mk
+++ b/Android.mk
@@ -159,7 +159,6 @@ vg_local_src_files := \
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 e90dfed1a..d159169d1 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 @@ software--to make sure the software is free for all its users. This
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 @@ patent must be licensed for everyone's free use or not licensed at all.
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 @@ make exceptions for this. Our decision will be guided by the two goals
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 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
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 @@ the "copyright" line and a pointer to where the full notice is found.
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 @@ necessary. Here is a sample; alter the names:
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 1ad50b0e1..a988da5af 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 @@ If your document contains nontrivial examples of program code, we
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 d58754823..44a6207ab 100644
--- a/Makefile.all.am
+++ b/Makefile.all.am
@@ -100,15 +100,17 @@ AM_CFLAGS_BASE = \
-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 @@ endif
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_CCASFLAGS_MIPS64_LINUX = @FLAG_M64@ -g @FLAG_MIPS64@
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 @@ endif
#
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_S390X_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
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 d35fd36d3..4ad7b1675 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -32,6 +32,7 @@ SUBDIRS = \
memcheck/tests/vbit-test \
auxprogs \
mpi \
+ solaris \
docs
DIST_SUBDIRS = $(SUBDIRS)
@@ -45,8 +46,9 @@ SUPP_FILES = \
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 @@ EXTRA_DIST = \
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 ca9d9a660..eb359db2b 100644
--- a/Makefile.tool-tests.am
+++ b/Makefile.tool-tests.am
@@ -26,6 +26,11 @@ AM_CXXFLAGS = -Winline -Wall -Wshadow -Wno-long-long -g \
# 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 41f5c9722..5af3023d9 100644
--- a/Makefile.tool.am
+++ b/Makefile.tool.am
@@ -36,6 +36,9 @@ TOOL_LDFLAGS_COMMON_LINUX = \
-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_MIPS64_LINUX = \
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_MIPS64_LINUX = \
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_LDFLAGS_TILEGX_LINUX = \
$(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 f4b2ce284..b4827452e 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:
+
+* Helgrind:
+
+* 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:
- - New monitor command 'all_snapshots <filename>' that dumps all snapshots
- taken so far.
+
+ - A new monitor command 'all_snapshots <filename>' 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
+
+ - 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 Helgrind version.
+ in the worst case) than the previous implementation.
- - 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.
+ - 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
+ - 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:
-
* ==================== 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 @@ where XXXXXX is the bug number as listed below.
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 @@ where XXXXXX is the bug number as listed below.
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 @@ where XXXXXX is the bug number as listed below.
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 5b3d3c080..96dac1b66 100644
--- a/README.s390
+++ b/README.s390
@@ -22,6 +22,9 @@ Limitations
- 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 000000000..ed73e498e
--- /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 27d1ab01f..ab78902f2 100644
--- a/README_MISSING_SYSCALL_OR_IOCTL
+++ b/README_MISSING_SYSCALL_OR_IOCTL
@@ -182,3 +182,54 @@ more specific case to get the right behaviour.
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 b84efd3a9..70f6491d8 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 003ebde9a..ec300159b 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_baseline ( VexGuestAMD64State* st );
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 @@ extern void amd64g_dirtyhelper_AESKEYGENASSIST (
#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 2887b0895..ab53e156b 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 @@ ULong LibVEX_GuestAMD64_get_rflags ( /*IN*/const VexGuestAMD64State* vex_state )
/* 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 @@ IRExpr* guest_amd64_spechelper ( const HChar* function_name,
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 @@ void do_get_x87 ( /*IN*/VexGuestAMD64State* vex_state,
}
+/*---------------------------------------------------------------*/
+/*--- 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 @@ void amd64g_dirtyhelper_FXSAVE_ALL_EXCEPT_XMM ( VexGuestAMD64State* gst,
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 @@ void amd64g_dirtyhelper_FXSAVE_ALL_EXCEPT_XMM ( VexGuestAMD64State* gst,
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 @@ void amd64g_dirtyhelper_FXSAVE_ALL_EXCEPT_XMM ( VexGuestAMD64State* gst,
dstS[6] = 0;
dstS[7] = 0;
}
+}
+
+
+/* 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());
- /* 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. */
+# 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 @@ VexEmNote amd64g_dirtyhelper_FXRSTOR_ALL_EXCEPT_XMM ( VexGuestAMD64State* gst,
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 @@ VexEmNote amd64g_dirtyhelper_FXRSTOR_ALL_EXCEPT_XMM ( VexGuestAMD64State* gst,
}
+/*---------------------------------------------------------------*/
+/*--- 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 @@ VexEmNote amd64g_dirtyhelper_FRSTORS ( /*OUT*/VexGuestAMD64State* vex_state,
/*---------------------------------------------------------------*/
-/*--- Misc integer helpers, including rotates and CPUID. ---*/
+/*--- CPUID helpers. ---*/
/*---------------------------------------------------------------*/
/* Claim to be the following CPU, which is probably representative of
@@ -2710,6 +2873,14 @@ void amd64g_dirtyhelper_CPUID_sse42_and_cx16 ( VexGuestAMD64State* st )
/* 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 @@ void amd64g_dirtyhelper_CPUID_avx_and_cx16 ( VexGuestAMD64State* st )
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 @@ void amd64g_dirtyhelper_CPUID_avx_and_cx16 ( VexGuestAMD64State* st )
}
+/* 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 add943d76..af4817f54 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 @@ IRExpr* doScalarWidening ( Int szSmall, Int szBig, Bool signd, IRExpr* src )
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 @@ static const HChar* nameGrp8 ( Int opc_aux )
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 @@ static IRExpr* get_FPU_sw ( void )
}
+/* 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 @@ ULong dis_FPU ( /*OUT*/Bool* decode_ok,
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 @@ ULong dis_FPU ( /*OUT*/Bool* decode_ok,
/* 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 @@ ULong dis_FPU ( /*OUT*/Bool* decode_ok,
/* 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 @@ ULong dis_FPU ( /*OUT*/Bool* decode_ok,
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 @@ ULong dis_FPU ( /*OUT*/Bool* decode_ok,
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 @@ ULong dis_FPU ( /*OUT*/Bool* decode_ok,
}
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 @@ ULong dis_FPU ( /*OUT*/Bool* decode_ok,
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 @@ ULong dis_FPU ( /*OUT*/Bool* decode_ok,
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 @@ ULong dis_FPU ( /*OUT*/Bool* decode_ok,
}
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 @@ ULong dis_FPU ( /*OUT*/Bool* decode_ok,
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 @@ ULong dis_FPU ( /*OUT*/Bool* decode_ok,
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 @@ ULong dis_MMXop_regmem_to_reg ( const VexAbiInfo* vbi,
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 @@ ULong dis_xadd_G_E ( /*OUT*/Bool* decode_ok,
//.. 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 @@ static Bool findSSECmpOp ( /*OUT*/Bool* preSwapP,
# 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 @@ static Bool findSSECmpOp ( /*OUT*/Bool* preSwapP,
// | | |
// v v v
case 0x0: XXX(False, Iop_CmpEQ32Fx4, False); break; // EQ_OQ
+ case 0x8: XXX(False, Iop_CmpEQ32Fx4, False); break; // EQ_UQ
+ 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 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
+ //
case 0x7: XXX(False, Iop_CmpUN32Fx4, True); break; // ORD_Q
- case 0x8: XXX(False, Iop_CmpEQ32Fx4, False); break; // EQ_UQ
+ case 0x17: XXX(False, Iop_CmpUN32Fx4, True); break; // ORD_S
+ //
case 0x9: XXX(True, Iop_CmpLE32Fx4, True); break; // NGE_US
- /* "Enhanced Comparison Predicate[s] for VEX-Encoded [insns] */
+ case 0x19: XXX(True, Iop_CmpLE32Fx4, True); break; // NGE_UQ
+ //
case 0xA: XXX(True, Iop_CmpLT32Fx4, True); break; // NGT_US
- // 0xB FALSE_OQ
- // 0xC: this isn't really right because it returns all-1s when
- // either operand is a NaN, and it should return all-0s.
- case 0xC: XXX(False, Iop_CmpEQ32Fx4, True); break; // NEQ_OQ
+ 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
- // 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 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 0x1E: XXX(True, Iop_CmpLT32Fx4, False); break; // GT_OQ
// 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 @@ static Long dis_SSE_cmp_E_to_G ( const VexAbiInfo* vbi,
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 @@ static Long dis_SSE_cmp_E_to_G ( const VexAbiInfo* vbi,
)
);
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 @@ static void gen_SEGV_if_not_32_aligned ( IRTemp effective_addr ) {
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 @@ static Long dis_PEXTRW_128_EregOnly_toG ( const VexAbiInfo* vbi, Prefix pfx,
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 Long dis_LDMXCSR ( const VexAbiInfo* vbi, Prefix pfx,
}
+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 @@ static Long dis_MOVMSKPD_256 ( const VexAbiInfo* vbi, Prefix pfx, Long delta )
__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 @@ Long dis_ESC_0F__SSE2 ( Bool* decode_OK,
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 @@ Long dis_ESC_0F__SSE2 ( Bool* decode_OK,
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 @@ Long dis_ESC_0F__SSE2 ( Bool* decode_OK,
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 @@ Long dis_ESC_0F__SSE2 ( Bool* decode_OK,
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 @@ Long dis_ESC_0F__SSE2 ( Bool* decode_OK,
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 @@ Long dis_ESC_0F__SSE2 ( Bool* decode_OK,
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 @@ Long dis_ESC_0F3A__SupSSE3 ( Bool* decode_OK,
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 @@ Long dis_ESC_0F3A__SupSSE3 ( Bool* decode_OK,
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 @@ Long dis_ESC_0F3A__SupSSE3 ( Bool* decode_OK,
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 @@ Long dis_ESC_0F3A__SupSSE3 ( Bool* decode_OK,
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 @@ static Long dis_PCMPxSTRx ( const VexAbiInfo* vbi, Prefix pfx,
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 @@ Long dis_ESC_NONE (
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 @@ Long dis_ESC_NONE (
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 @@ Long dis_ESC_NONE (
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 @@ Long dis_ESC_NONE (
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 @@ Long dis_ESC_NONE (
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 @@ Long dis_ESC_NONE (
}
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 @@ Long dis_ESC_NONE (
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 @@ Long dis_ESC_NONE (
IRConst_U64(d64),
OFFB_RIP
));
- DIP("jrcxz 0x%llx\n", d64);
+ DIP("jrcxz 0x%llx\n", (ULong)d64);
}
return delta;
@@ -20833,7 +21303,7 @@ Long dis_ESC_NONE (
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 @@ Long dis_ESC_NONE (
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 @@ Long dis_ESC_NONE (
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 @@ Long dis_ESC_0F (
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 @@ Long dis_ESC_0F (
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 @@ Long dis_ESC_0F (
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 @@ Long dis_AVX128_cmp_V_E_to_G ( /*OUT*/Bool* uses_vvvv,
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 @@ Long dis_AVX128_cmp_V_E_to_G ( /*OUT*/Bool* uses_vvvv,
: 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 @@ Long dis_AVX256_cmp_V_E_to_G ( /*OUT*/Bool* uses_vvvv,
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 @@ Long dis_AVX256_cmp_V_E_to_G ( /*OUT*/Bool* uses_vvvv,
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 @@ Long dis_ESC_0F3A__VEX (
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 @@ Long dis_ESC_0F3A__VEX (
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 @@ DisResult disInstr_AMD64_WRK (
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 @@ DisResult disInstr_AMD64_WRK (
*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 a3431f073..0d8b83b49 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 e8dda647b..0cf804608 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 14c27f1ab..8da978099 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 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn)
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 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn)
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 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn)
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 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn)
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 @@ Bool dis_ARM64_branch_etc(/*MB_OUT*/DisResult* dres, UInt insn,
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 @@ Bool dis_AdvSIMD_TBL_TBX(/*MB_OUT*/DisResult* dres, UInt insn)
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 @@ Bool dis_AdvSIMD_scalar_three_different(/*MB_OUT*/DisResult* dres, UInt insn)
: (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 @@ Bool dis_AdvSIMD_scalar_three_same(/*MB_OUT*/DisResult* dres, UInt insn)
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 @@ Bool dis_AdvSIMD_scalar_x_indexed_element(/*MB_OUT*/DisResult* dres, UInt insn)
: (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 @@ Bool dis_AdvSIMD_scalar_x_indexed_element(/*MB_OUT*/DisResult* dres, UInt insn)
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 @@ Bool dis_AdvSIMD_shift_by_immediate(/*MB_OUT*/DisResult* dres, UInt insn)
/* */
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 @@ Bool dis_AdvSIMD_two_reg_misc(/*MB_OUT*/DisResult* dres, UInt insn)
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 b5b012b82..a97265e22 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 a07eeeb5f..92b96cfeb 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 9c68e4e1b..54ccd072c 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 @@ static void put_GEFLAG32 ( Int flagNo, /* 0, 1, 2 or 3 */
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 @@ Bool dis_neon_vext ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_vdup ( UInt theInstr, IRTemp condT )
} 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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
}
}
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
}
}
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
}
}
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
}
}
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3same ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3diff ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3diff ( UInt theInstr, IRTemp condT )
}
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 @@ Bool dis_neon_data_3diff ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3diff ( UInt theInstr, IRTemp condT )
}
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 @@ Bool dis_neon_data_3diff ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3diff ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3diff ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_3diff ( UInt theInstr, IRTemp condT )
}
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 @@ Bool dis_neon_data_3diff ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_scalar ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_scalar ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_scalar ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_scalar ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_scalar ( UInt theInstr, IRTemp condT )
}
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 @@ Bool dis_neon_data_2reg_and_scalar ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_scalar ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_scalar ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_shift ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_shift ( UInt theInstr, IRTemp condT )
} 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 @@ Bool dis_neon_data_2reg_and_shift ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_shift ( UInt theInstr, IRTemp condT )
} 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 @@ Bool dis_neon_data_2reg_and_shift ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_shift ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_shift ( UInt theInstr, IRTemp condT )
} 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 @@ Bool dis_neon_data_2reg_and_shift ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_shift ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_shift ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_shift ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_shift ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_shift ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_shift ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_and_shift ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
}
}
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
}
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
}
}
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
}
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
}
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_data_2reg_misc ( UInt theInstr, IRTemp condT )
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 @@ Bool dis_neon_load_or_store ( UInt theInstr,
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 @@ Bool dis_neon_load_or_store ( UInt theInstr,
}
}
}
- 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 @@ Bool dis_neon_load_or_store ( UInt theInstr,
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 @@ static void mk_ldm_stm ( Bool arm, /* True: ARM, False: Thumb */
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 @@ static void mk_ldm_stm ( Bool arm, /* True: ARM, False: Thumb */
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 @@ static Bool decode_CP10_CP11_instruction (
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 @@ static Bool decode_CP10_CP11_instruction (
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 @@ static Bool decode_CP10_CP11_instruction (
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 @@ static Bool decode_CP10_CP11_instruction (
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 @@ static Bool decode_CP10_CP11_instruction (
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 @@ static Bool decode_CP10_CP11_instruction (
/* 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 @@ static Bool decode_CP10_CP11_instruction (
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 @@ DisResult disInstr_ARM_WRK (
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 @@ DisResult disInstr_ARM_WRK (
}
}
- /* ------------------- 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 @@ DisResult disInstr_ARM_WRK (
/* ----------------------------------------------------------- */
/* -------------- 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 @@ DisResult disInstr_ARM_WRK (
/* 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 @@ DisResult disInstr_ARM_WRK (
}
/* ----------------------------------------------------------- */
+ /* -- 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 @@ DisResult disInstr_ARM_WRK (
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 @@ DisResult disInstr_THUMB_WRK (
/* ------ 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 @@ DisResult disInstr_THUMB_WRK (
&& 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 @@ DisResult disInstr_THUMB_WRK (
/* ------------ (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 @@ DisResult disInstr_THUMB_WRK (
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 @@ DisResult disInstr_THUMB_WRK (
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 @@ DisResult disInstr_THUMB_WRK (
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 ca3682ee0..779f8ae45 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 49c94d79b..78a5a870d 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 0e36e94e4..2c9b25b07 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 @@ Bool compute_PCMPxSTRx ( /*OUT*/V128* resV,
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 8ccdfd692..5a520eafe 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 c60e026bf..f4c3bbc90 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 863efda83..4fbb67ef9 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 @@ UInt mips32_dirtyhelper_rdhwr ( UInt rt, UInt rd )
__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 @@ ULong mips64_dirtyhelper_rdhwr ( ULong rt, ULong rd )
__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 8e9429814..b72d314c9 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 @@ static Bool dis_instr_shrt ( UInt theInstr )
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 @@ static Bool dis_instr_shrt ( UInt theInstr )
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 @@ static Bool dis_instr_shrt ( UInt theInstr )
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 @@ static Bool dis_instr_shrt ( UInt theInstr )
}
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 @@ static Bool dis_instr_CCondFmt ( UInt cins )
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 @@ static Bool dis_instr_CCondFmt ( UInt cins )
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 @@ static Bool dis_instr_CVM ( UInt theInstr )
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 @@ static Bool dis_instr_CVM ( UInt theInstr )
/* 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 @@ static Bool dis_instr_CVM ( UInt theInstr )
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 @@ static Bool dis_instr_CVM ( UInt theInstr )
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 @@ static Bool dis_instr_CVM ( UInt theInstr )
}
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 @@ static Bool dis_instr_CVM ( UInt theInstr )
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 @@ static Bool dis_instr_CVM ( UInt theInstr )
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 @@ static Bool dis_instr_CVM ( UInt theInstr )
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 @@ static Bool dis_instr_CVM ( UInt theInstr )
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 @@ static Bool dis_instr_CVM ( UInt theInstr )
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 @@ static Bool dis_instr_CVM ( UInt theInstr )
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 @@ static Bool dis_instr_CVM ( UInt theInstr )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
}
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
}
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
}
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static UInt disDSPInstr_MIPS_WRK ( UInt cins )
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
/* 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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
putIReg(rt, mkWidenFrom32(ty, binop(Iop_Or32, mkexpr(t5),
mkexpr(t3)), True));
-#endif
} else {
/* t1 = addr */
t1 = newTemp(Ity_I32);
@@ -13861,40 +13857,29 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
putIReg(rt, mkWidenFrom32(ty, binop(Iop_Or32, mkexpr(t5),
mkexpr(t3)), True));
-#endif
} else {
/* t1 = addr */
@@ -13937,13 +13921,13 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
break;
} else {
- DIP("mfhi r%d", rd);
+ DIP("mfhi r%u", rd);
putIReg(rd, getHI());
break;
}
@@ -15813,7 +15800,7 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
break;
} else {
- DIP("mthi r%d", rs);
+ DIP("mthi r%u", rs);
putHI(getIReg(rs));
break;
}
@@ -15828,7 +15815,7 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
break;
} else {
- DIP("mflo r%d", rd);
+ DIP("mflo r%u", rd);
putIReg(rd, getLO());
break;
}
@@ -15843,14 +15830,14 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
}
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 @@ static DisResult disInstr_MIPS_WRK ( Bool(*resteerOkFn) (/*opaque */void *,
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 8ef17065a..f2cf7c75b 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 dc36818b3..a94bdad42 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 @@ void LibVEX_GuestPPC32_initialise ( /*OUT*/VexGuestPPC32State* vex_state )
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 @@ void LibVEX_GuestPPC64_initialise ( /*OUT*/VexGuestPPC64State* vex_state )
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 f15e16641..6a0b6d851 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 @@ static void* fnptr_to_fnentry( const VexAbiInfo* vbi, void* f )
#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 @@ typedef enum {
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* ea_rAor0_simm ( UInt rA, UInt simm16 )
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 @@ static IRExpr* /* :: Ity_I32/64 */ getGST ( PPC_GST reg )
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 @@ static void putGST ( PPC_GST reg, IRExpr* src )
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 @@ static Bool dis_int_arith ( UInt theInstr )
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 @@ static Bool dis_branch ( UInt theInstr,
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 @@ static Bool dis_branch ( UInt theInstr,
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 @@ static Bool dis_trapi ( UInt theInstr,
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 @@ static Bool dis_trapi ( UInt theInstr,
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 @@ static Bool dis_trap ( UInt theInstr,
: 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 @@ static Bool dis_trap ( UInt theInstr,
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 @@ static Bool dis_memsync ( UInt theInstr )
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 @@ static Bool dis_memsync ( UInt theInstr )
/* 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 @@ static Bool dis_memsync ( UInt theInstr )
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 @@ static Bool dis_memsync ( UInt theInstr )
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 @@ static Bool dis_memsync ( UInt theInstr )
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 @@ static Bool dis_memsync ( UInt theInstr )
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 @@ static Bool dis_memsync ( UInt theInstr )
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 @@ static Bool dis_proc_ctl ( const VexAbiInfo* vbi, UInt theInstr )
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 @@ static Bool dis_proc_ctl ( const VexAbiInfo* vbi, UInt theInstr )
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 @@ static Bool dis_proc_ctl ( const VexAbiInfo* vbi, UInt theInstr )
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 @@ static Bool dis_proc_ctl ( const VexAbiInfo* vbi, UInt theInstr )
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 @@ static Bool dis_proc_ctl ( const VexAbiInfo* vbi, UInt theInstr )
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 @@ static Bool dis_proc_ctl ( const VexAbiInfo* vbi, UInt theInstr )
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 @@ static Bool dis_proc_ctl ( const VexAbiInfo* vbi, UInt theInstr )
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 @@ static Bool dis_proc_ctl ( const VexAbiInfo* vbi, UInt theInstr )
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 @@ static Bool dis_proc_ctl ( const VexAbiInfo* vbi, UInt theInstr )
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 @@ static Bool dis_cache_manage ( UInt theInstr,
}
}
- 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 @@ static Bool dis_fp_scr ( UInt theInstr, Bool GX_level )
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 @@ static Bool dis_dfp_class_test ( UInt theInstr )
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 @@ static Bool dis_dfp_class_test ( UInt theInstr )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
}
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_conv ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_dp_arith ( UInt theInstr, UInt opc2 )
}
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 @@ dis_vxv_dp_arith ( UInt theInstr, UInt opc2 )
{
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 @@ dis_vxv_dp_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_dp_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_dp_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_sp_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_sp_arith ( UInt theInstr, UInt opc2 )
* 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 @@ dis_vxv_sp_arith ( UInt theInstr, UInt opc2 )
}
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 @@ dis_vxv_sp_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_sp_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_sp_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_misc ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_misc ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_misc ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_misc ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_misc ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_misc ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_misc ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_misc ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_misc ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_misc ( UInt theInstr, UInt opc2 )
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 @@ dis_vxv_misc ( UInt theInstr, UInt opc2 )
_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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
*/
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
{
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
{
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
{
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
{
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
}
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_arith ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_cmp( UInt theInstr, UInt opc2 )
/* 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 @@ dis_vvec_cmp( UInt theInstr, UInt opc2 )
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 @@ dis_vvec_cmp( UInt theInstr, UInt opc2 )
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 @@ dis_vvec_cmp( UInt theInstr, UInt opc2 )
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 @@ dis_vvec_cmp( UInt theInstr, UInt opc2 )
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 @@ dis_vvec_cmp( UInt theInstr, UInt opc2 )
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 @@ dis_vvec_cmp( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_misc( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_misc( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_misc( UInt theInstr, UInt opc2 )
{
/* 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 @@ dis_vxs_misc( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_misc( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_misc( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_misc( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_misc( UInt theInstr, UInt opc2 )
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 @@ dis_vxs_misc( UInt theInstr, UInt opc2 )
{
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 @@ dis_vx_logic ( UInt theInstr, UInt opc2 )
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 @@ dis_vx_load ( UInt theInstr )
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 @@ dis_vx_load ( UInt theInstr )
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 @@ dis_vx_load ( UInt theInstr )
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 @@ dis_vx_load ( UInt theInstr )
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 @@ dis_vx_load ( UInt theInstr )
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 @@ dis_vx_load ( UInt theInstr )
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 @@ dis_vx_load ( UInt theInstr )
{
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 @@ dis_vx_store ( UInt theInstr )
* 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 @@ dis_vx_store ( UInt theInstr )
{
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 @@ dis_vx_store ( UInt theInstr )
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 @@ dis_vx_store ( UInt theInstr )
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 @@ dis_vx_store ( UInt theInstr )
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 @@ dis_vx_permute_misc( UInt theInstr, UInt opc2 )
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 @@ dis_vx_permute_misc( UInt theInstr, UInt opc2 )
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 @@ dis_vx_permute_misc( UInt theInstr, UInt opc2 )
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 @@ dis_vx_permute_misc( UInt theInstr, UInt opc2 )
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 @@ dis_vx_permute_misc( UInt theInstr, UInt opc2 )
{
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 @@ static Bool dis_transactional_memory ( UInt theInstr, UInt nextInstr,
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 @@ static Bool dis_transactional_memory ( UInt theInstr, UInt nextInstr,
/* 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 @@ static Bool dis_transactional_memory ( UInt theInstr, UInt nextInstr,
/* 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 @@ static Bool dis_transactional_memory ( UInt theInstr, UInt nextInstr,
/* 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 @@ static Bool dis_transactional_memory ( UInt theInstr, UInt nextInstr,
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 @@ static Bool dis_transactional_memory ( UInt theInstr, UInt nextInstr,
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 @@ static Bool dis_transactional_memory ( UInt theInstr, UInt nextInstr,
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 @@ static Bool dis_transactional_memory ( UInt theInstr, UInt nextInstr,
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 @@ static Bool dis_transactional_memory ( UInt theInstr, UInt nextInstr,
/* 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 @@ static Bool dis_transactional_memory ( UInt theInstr, UInt nextInstr,
/* 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 @@ DisResult disInstr_PPC_WRK (
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 @@ DisResult disInstr_PPC_WRK (
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 758cf91b0..cfe5f2fb8 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 622cdccf5..f484f8ed0 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 @@ guest_s390x_spechelper(const HChar *function_name, IRExpr **args,
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 @@ guest_s390x_spechelper(const HChar *function_name, IRExpr **args,
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 @@ guest_s390x_spechelper(const HChar *function_name, IRExpr **args,
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 023cb7d9b..116a60625 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 @@ s390_irgen_LXEB(UChar r1, IRTemp op2addr)
}
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 @@ s390_decode_4byte_and_irgen(const UChar *bytes)
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 @@ s390_decode_4byte_and_irgen(const UChar *bytes)
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 efa78ca9a..9910890ca 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 cda549953..b26c06db6 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 @@ ULong tilegx_dirtyhelper_gen ( ULong opc,
break;
case 271:
{
- return __insn_v1shli(rd1, rd2);
+ return __insn_v1shl(rd1, rd2);
}
break;
case 272:
@@ -788,7 +788,7 @@ ULong tilegx_dirtyhelper_gen ( ULong opc,
break;
case 273:
{
- return __insn_v1shrsi(rd1, rd2);
+ return __insn_v1shrs(rd1, rd2);
}
break;
case 274:
@@ -988,7 +988,7 @@ ULong tilegx_dirtyhelper_gen ( ULong opc,
break;
case 313:
{
- return __insn_v2shli(rd1, rd2);
+ return __insn_v2shl(rd1, rd2);
}
break;
case 314:
@@ -1003,7 +1003,7 @@ ULong tilegx_dirtyhelper_gen ( ULong opc,
break;
case 316:
{
- return __insn_v2shrsi(rd1, rd2);
+ return __insn_v2shrs(rd1, rd2);
}
break;
case 317:
@@ -1013,7 +1013,7 @@ ULong tilegx_dirtyhelper_gen ( ULong opc,
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 4ce6f7bc5..f13c7ad71 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 @@ static IRExpr *getIReg ( UInt iregNo )
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 @@ static void putIReg ( UInt archreg, IRExpr * e )
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 @@ static IRStmt* dis_branch ( IRExpr* guard, ULong imm )
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 @@ static DisResult disInstr_TILEGX_WRK ( Bool(*resteerOkFn) (void *, Addr),
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 @@ static DisResult disInstr_TILEGX_WRK ( Bool(*resteerOkFn) (void *, Addr),
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 @@ static DisResult disInstr_TILEGX_WRK ( Bool(*resteerOkFn) (void *, Addr),
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 @@ static DisResult disInstr_TILEGX_WRK ( Bool(*resteerOkFn) (void *, Addr),
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 @@ static DisResult disInstr_TILEGX_WRK ( Bool(*resteerOkFn) (void *, Addr),
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 @@ static DisResult disInstr_TILEGX_WRK ( Bool(*resteerOkFn) (void *, Addr),
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 @@ static DisResult disInstr_TILEGX_WRK ( Bool(*resteerOkFn) (void *, Addr),
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 @@ static DisResult disInstr_TILEGX_WRK ( Bool(*resteerOkFn) (void *, Addr),
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 412ee9400..65f4a081b 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_sse0 ( VexGuestX86State* );
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 @@ extern VexEmNote
#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 b4875ee9f..bc5a29eed 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 LibVEX_GuestX86_get_eflags ( /*IN*/const VexGuestX86State* vex_state )
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 @@ VexEmNote x86g_dirtyhelper_FXRSTOR ( VexGuestX86State* gst, HWord addr )
/* 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 @@ VexEmNote x86g_dirtyhelper_FXRSTOR ( VexGuestX86State* gst, HWord addr )
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 @@ VexEmNote x86g_dirtyhelper_FLDENV ( VexGuestX86State* gst, HWord addr )
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 @@ void x86g_dirtyhelper_CPUID_sse1 ( VexGuestX86State* st )
}
}
+/* 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 @@ void x86g_dirtyhelper_CPUID_sse1 ( VexGuestX86State* st )
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 fc402cea9..c24d9a4bf 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 @@ IRTemp disAMode ( Int* len, UChar sorb, Int delta, HChar* buf )
/* ! 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 @@ static
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 @@ static
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 @@ void fp_do_oprev_ST_ST ( const HChar* op_txt, IROp op, UInt st_src,
/* %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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
/* 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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
/* 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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
}
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
}
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
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 @@ UInt dis_MMXop_regmem_to_reg ( UChar sorb,
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 @@ static UInt dis_SSEcmp_E_to_G ( UChar sorb, Int delta,
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 @@ static UInt dis_SSEcmp_E_to_G ( UChar sorb, Int delta,
);
delta += alen+1;
DIP("%s $%d,%s,%s\n", opname,
- (Int)imm8,
+ imm8,
dis_buf,
nameXMMReg(gregOfRM(rm)) );
}
@@ -8890,7 +8890,7 @@ DisResult disInstr_X86_WRK (
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 @@ DisResult disInstr_X86_WRK (
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 @@ DisResult disInstr_X86_WRK (
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 @@ DisResult disInstr_X86_WRK (
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 @@ DisResult disInstr_X86_WRK (
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 @@ DisResult disInstr_X86_WRK (
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 @@ DisResult disInstr_X86_WRK (
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 @@ DisResult disInstr_X86_WRK (
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 @@ DisResult disInstr_X86_WRK (
*/
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 @@ DisResult disInstr_X86_WRK (
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 @@ DisResult disInstr_X86_WRK (
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 @@ DisResult disInstr_X86_WRK (
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 @@ DisResult disInstr_X86_WRK (
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 @@ DisResult disInstr_X86_WRK (
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 @@ DisResult disInstr_X86_WRK (
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 @@ DisResult disInstr_X86_WRK (
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 7534e4378..9dec78c10 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 @@ AMD64Instr* AMD64Instr_SseLdSt ( Bool isLoad, Int sz,
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 @@ void ppAMD64Instr ( const AMD64Instr* i, Bool mode64 )
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 @@ void ppAMD64Instr ( const AMD64Instr* i, Bool mode64 )
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 @@ void getRegUsage_AMD64Instr ( HRegUsage* u, const AMD64Instr* i, Bool mode64 )
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 @@ void mapRegs_AMD64Instr ( HRegRemap* m, AMD64Instr* i, Bool mode64 )
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 @@ Int emit_AMD64Instr ( /*MB_MOD*/Bool* is_profInc,
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 @@ Int emit_AMD64Instr ( /*MB_MOD*/Bool* is_profInc,
*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 @@ Int emit_AMD64Instr ( /*MB_MOD*/Bool* is_profInc,
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 @@ Int emit_AMD64Instr ( /*MB_MOD*/Bool* is_profInc,
}
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 @@ Int emit_AMD64Instr ( /*MB_MOD*/Bool* is_profInc,
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 @@ Int emit_AMD64Instr ( /*MB_MOD*/Bool* is_profInc,
/*NOTREACHED*/
done:
- vassert(p - &buf[0] <= 32);
+ vassert(p - &buf[0] <= 64);
return p - &buf[0];
}
@@ -3758,7 +3889,7 @@ VexInvalRange chainXDirect_AMD64 ( VexEndness endness_host,
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 @@ VexInvalRange chainXDirect_AMD64 ( VexEndness endness_host,
/* 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 @@ VexInvalRange chainXDirect_AMD64 ( VexEndness endness_host,
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 @@ VexInvalRange unchainXDirect_AMD64 ( VexEndness endness_host,
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 @@ VexInvalRange unchainXDirect_AMD64 ( VexEndness endness_host,
&& 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 @@ VexInvalRange unchainXDirect_AMD64 ( VexEndness endness_host,
*/
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 f76cd8392..fe999f2e9 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 @@ typedef
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 @@ typedef
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_SseSI2SF ( Int szS, Int szD, HReg src, HReg dst
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 3403d5456..a08c98046 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 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt )
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 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt )
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 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt )
case Ijk_SigSEGV:
case Ijk_SigTRAP:
case Ijk_Sys_syscall:
+ case Ijk_Sys_int210:
case Ijk_InvalICache:
case Ijk_Yield:
{
@@ -4869,6 +4893,7 @@ static void iselNext ( ISelEnv* env,
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 b886e81cc..82f658ee8 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 @@ Int emit_ARM64Instr ( /*MB_MOD*/Bool* is_profInc,
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 039fce168..d74f8a131 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 0568fdeff..a57240891 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 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt )
= 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 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt )
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 @@ static void iselNext ( ISelEnv* env,
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 310271d39..82d5519fe 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 @@ void ppARMNRS(ARMNRS *p)
{
ppHRegARM(p->reg);
if (p->tag == ARMNRS_Scalar) {
- vex_printf("[%d]", p->index);
+ vex_printf("[%u]", p->index);
}
}
@@ -1889,7 +1889,7 @@ void ppARMInstr ( const ARMInstr* i ) {
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 @@ void ppARMInstr ( const ARMInstr* i ) {
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 @@ void ppARMInstr ( const ARMInstr* i ) {
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 f0b172bae..47f459d82 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 b867c3d10..151311218 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 d4e9fb7d6..fe4497431 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 6757f7454..7282d979c 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 b3036063f..fd46486f8 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 a6192f7c4..33fc7a3a2 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 b6de07b69..5c4804e7a 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 22df70803..77a318310 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 c30c0dfa0..c547666a4 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 c5dd7b6f3..045ee8dc8 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 29134357f..ffb55f497 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 367491f59..be70f5d49 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 e8d33dfcc..c01e3c982 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 d85a3064f..7d73ecc1e 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 @@ const HChar *showMIPSFpOp(MIPSFpOp op)
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 @@ static UChar *mkFormR(UChar * p, UInt opc, UInt rs, UInt rt, UInt rd, UInt sa,
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 @@ Int emit_MIPSInstr ( /*MB_MOD*/Bool* is_profInc,
/* 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 @@ Int emit_MIPSInstr ( /*MB_MOD*/Bool* is_profInc,
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 500c97f2b..850449807 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 213c52a0b..a4a89cb97 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 e9de08bda..13b193ca8 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 @@ Int emit_PPCInstr ( /*MB_MOD*/Bool* is_profInc,
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 8f41190c9..c04c994ac 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 40fe8951e..43e798924 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 HReg iselWordExpr_R_wrk ( ISelEnv* env, IRExpr* e,
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 @@ static HReg iselDfp64Expr_wrk(ISelEnv* env, IRExpr* e, IREndness IEndianess)
}
default:
vex_printf( "ERROR: iselDfp64Expr_wrk, UNKNOWN unop case %d\n",
- e->Iex.Unop.op );
+ (Int)e->Iex.Unop.op );
}
}
@@ -4721,7 +4723,7 @@ static void iselDfp128Expr_wrk(HReg* rHi, HReg *rLo, ISelEnv* env, IRExpr* e,
}
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 974ec6d47..9885d474f 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 @@ s390_hreg_as_string(HReg reg)
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 @@ s390_emit_LEXBRA(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2)
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 @@ s390_insn_bfp128_compare(UChar size, HReg dst, HReg op1_hi, HReg op1_lo,
}
-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_bfp128_convert(UChar size, s390_bfp_conv_t tag, HReg dst_hi,
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 @@ s390_sprintf(HChar *buf, const HChar *fmt, ...)
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 @@ s390_sprintf(HChar *buf, const HChar *fmt, ...)
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 @@ s390_insn_as_string(const s390_insn *insn)
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 @@ s390_insn_bfp_convert_emit(UChar *buf, const s390_insn *insn)
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 9d732f975..a7c4b1e9f 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 @@ typedef enum {
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_unop(UChar size, s390_bfp_unop_t tag, HReg dst,
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 dee892aeb..02f399d04 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 @@ doHelperCall(/*OUT*/UInt *stackAdjustAfterCall,
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 @@ s390_isel_float128_expr_wrk(HReg *dst_hi, HReg *dst_lo, ISelEnv *env,
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 @@ s390_isel_float_expr_wrk(ISelEnv *env, IRExpr *expr)
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 92ca2c7c5..fc259e980 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 @@ static Int display_insn ( struct tilegx_decoded_instruction
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 decode_and_display ( tilegx_bundle_bits *p, Int count, ULong pc )
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 @@ Int decode_and_display ( tilegx_bundle_bits *p, Int count, ULong pc )
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 8788e1a84..344a4409e 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 7e4e6eb45..0c9ea6514 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 @@ static void doHelperCall ( ISelEnv * env, IRExpr * guard, IRCallee * cee,
}
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 @@ static void doHelperCall ( ISelEnv * env, IRExpr * guard, IRCallee * cee,
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 792381e4c..6321a3ecb 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 @@ void ppX86Instr ( const X86Instr* i, Bool mode64 ) {
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 @@ Int emit_X86Instr ( /*MB_MOD*/Bool* is_profInc,
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 @@ VexInvalRange chainXDirect_X86 ( VexEndness endness_host,
*/
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 @@ VexInvalRange chainXDirect_X86 ( VexEndness endness_host,
/* 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 @@ VexInvalRange unchainXDirect_X86 ( VexEndness endness_host,
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 @@ VexInvalRange unchainXDirect_X86 ( VexEndness endness_host,
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 @@ VexInvalRange patchProfInc_X86 ( VexEndness endness_host,
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 f1f737f34..3eacad77f 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 011cba568..56171bf7a 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 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt )
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 @@ static void iselNext ( ISelEnv* env,
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 da851f518..4a7b77033 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 @@ void ppIRType ( IRType ty )
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 @@ void ppIRTemp ( IRTemp tmp )
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 @@ void ppIROp ( IROp op )
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 ppIRStoreG ( const IRStoreG* sg )
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 @@ void ppIRJumpKind ( IRJumpKind kind )
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 @@ IRSB* deepCopyIRSBExceptStmts ( const IRSB* bb )
/*--- Primop types ---*/
/*---------------------------------------------------------------*/
-static
void typeOfPrimop ( IROp op,
/*OUTs*/
IRType* t_dst,
@@ -3158,6 +3161,7 @@ void typeOfPrimop ( IROp op,
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 @@ void typeOfIRLoadGOp ( IRLoadGOp cvt,
/*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 012eecd58..93b4c1c9b 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 @@ vex_inject_ir(IRSB *irsb, IREndness endian)
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 560a25b1f..40fd46f85 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 6900fa709..f339426c6 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 52cef9bad..7a7246a34 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 @@ static IRExpr* mkZeroOfPrimopResultType ( IROp op )
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 @@ static IRExpr* fold_Expr ( IRExpr** env, IRExpr* e )
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 @@ IRSB* cprop_BB ( IRSB* in )
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 43b2a4726..f0129620b 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 dbe63697d..8f3a3943e 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 eb97ec19c..af13e75db 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 ec680658b..2e51ded78 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 d0732e927..028d353ae 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 @@ UInt vex_sprintf ( HChar* buf, const HChar *format, ... )
}
+/*---------------------------------------------------------*/
+/*--- 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 018ba4fde..57f45ed80 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 @@ static inline void* LibVEX_Alloc_inline ( SizeT nbytes )
#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 1e8988396..6751d8063 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 95cf1f770..fa18ca5d4 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 152244514..2334f01e0 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 3543de9d6..011fd5391 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 @@ void LibVEX_default_VexArchInfo ( /*OUT*/VexArchInfo* vai );
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 @@ typedef
/* 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 59859d09d..b1d0f6ca5 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 5e6a9d867..943513062 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 1043b20c0..fd104ab02 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 @@ typedef
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 @@ typedef
%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 @@ void LibVEX_GuestAMD64_initialise ( /*OUT*/VexGuestAMD64State* vex_state );
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 @@ void
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 ae77b1753..f44626259 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 ac2243288..c438c1ed2 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 99b9dbb2e..fd702a311 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 70073b603..fe28aca65 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 3c2fd9e3b..5bebef84c 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 @@ typedef
/* 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 13a3540f3..f3310cbb4 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 @@ typedef
/* 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 a163b7f93..99d5947b6 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 61a60e3ac..d3c706280 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 ac780ac65..5c77569c2 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 @@ void LibVEX_GuestX86_initialise ( /*OUT*/VexGuestX86State* vex_state );
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 @@ void
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 145caa481..4c0539950 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 @@ typedef
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 @@ typedef
/* 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 @@ typedef
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
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 a8c8c531f..ecdc11be1 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 82090424f..38ff2e125 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 2b47591de..5db6ec6b7 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 @@ static void MC_helperc_value_check4_fail( void ) { }
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 @@ static Bool isShadowAtom ( MCEnv* mce, IRAtom* a1 )
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 89ca89b75..f5654c169 100644
--- a/auxprogs/Makefile.am
+++ b/auxprogs/Makefile.am
@@ -36,9 +36,16 @@ valgrind_listener_LDFLAGS = $(AM_CFLAGS_PRI)
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 @@ valgrind_di_server_LDFLAGS = $(AM_CFLAGS_PRI)
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 000000000..1f0332ae6
--- /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 e6b98028a..bd8fdc594 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 fa95515fe..6e94b9afa 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 bd127d76e..22f7cab2e 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 @@ runcmd () {
(eval "$*") >> log.verbose 2>&1
- if [ $? == 0 ]
+ if [ $? = 0 ]
then
echo "done"
return 0
diff --git a/auxprogs/gsl19test b/auxprogs/gsl19test
index 3c81e1d26..b97738f50 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 @@ runcmd () {
(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 bfcdd1875..1715a55a6 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 8da7a288b..d56c74edf 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 af9f80493..a587d2412 100644
--- a/cachegrind/Makefile.am
+++ b/cachegrind/Makefile.am
@@ -28,9 +28,13 @@ cg_merge_CPPFLAGS = $(AM_CPPFLAGS_PRI)
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 9fbea2046..69365e864 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 @@ usage: cg_annotate [options] cachegrind-out-file [source-files...]
-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 376d79e33..08558be8c 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 @@ configure_caches(cache_t *I1c, cache_t *D1c, cache_t *LLc,
}
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 7f9430bb9..910a9b16d 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 396bde167..a347345d0 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 96f4b1543..395460bf7 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 @@ usage: cg_diff [options] <cachegrind-out-file1> <cachegrind-out-file2>
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 dcc6220c4..de0c2a98a 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 @@ static void fprint_CC_table_and_calc_totals(void)
// 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 @@ static void fprint_CC_table_and_calc_totals(void)
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 @@ static void fprint_CC_table_and_calc_totals(void)
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 @@ static void fprint_CC_table_and_calc_totals(void)
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 @@ static void cg_fini(Int exitcode)
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 @@ static void cg_pre_clo_init(void)
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 6cb7f5ee9..b17b1ea8a 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 1b33fcf82..7edd18e6c 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 @@ Bool cachesim_ref_is_miss(cache_t2* c, Addr a, UChar size)
}
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 b9b3812eb..ceea5b969 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 @@ void resize_bb_table(void)
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 @@ static BB* new_bb(obj_node* obj, PtrdiffT offset,
#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 @@ BB* lookup_bb(obj_node* obj, PtrdiffT offset)
}
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 @@ obj_node* obj_of_address(Addr addr)
* 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 @@ BB* CLG_(get_bb)(Addr addr, IRSB* bbIn, /*OUT*/ Bool *seen_before)
"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 @@ void CLG_(delete_bb)(Addr addr)
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 @@ void CLG_(delete_bb)(Addr addr)
}
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 1580a47c2..e9426e5d8 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 @@ void CLG_(zero_bbcc)(BBCC* bbcc)
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* lookup_bbcc(BB* bb, Context* cxt)
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 @@ static void resize_bbcc_hash(void)
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 @@ void insert_bbcc_into_hash(BBCC* bbcc)
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 @@ void CLG_(setup_bbcc)(BB* bb)
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 1079090c1..33b0e29d0 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 75b1a079e..82f6f052d 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 a38ee16f6..76602599f 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 19846af43..abe51268b 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 @@ void ensure_stack_size(Int i)
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 @@ void CLG_(push_call_stack)(BBCC* from, UInt jmp, BBCC* to, Addr sp, Bool skip)
". . . . . . . . . . " };
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 @@ void CLG_(push_call_stack)(BBCC* from, UInt jmp, BBCC* to, Addr sp, Bool skip)
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 5ee62e6ce..fa76f1e6a 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 92b85276e..33f738627 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 @@ static void resize_cxt_table(void)
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 @@ Context* CLG_(get_cxt)(fn_node** fn)
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 @@ void CLG_(push_cxt)(fn_node* fn)
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 @@ void CLG_(push_cxt)(fn_node* fn)
/* 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 @@ void CLG_(push_cxt)(fn_node* fn)
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 @@ void CLG_(push_cxt)(fn_node* fn)
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 63256c71c..507117002 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 8335f0da2..25ad7c3f6 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 2ef21fd01..6e8215cea 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 @@ void CLG_(print_cxt)(Int s, Context* cxt, int rec_index)
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 @@ void CLG_(print_bbcc)(int s, BBCC* bbcc)
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 @@ void CLG_(print_eventset)(int s, EventSet* es)
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 @@ void CLG_(print_cost)(int s, EventSet* es, ULong* c)
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 @@ void CLG_(print_bbcc_fn)(BBCC* bbcc)
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 @@ void CLG_(print_bbcc_fn)(BBCC* bbcc)
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 @@ void CLG_(print_bbcc_cost)(int s, BBCC* bbcc)
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 @@ void CLG_(print_bbcc_cost)(int s, BBCC* bbcc)
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 @@ void CLG_(print_context)(void)
{
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 4426b6ac7..182b199b5 100644
--- a/callgrind/docs/cl-format.xml
+++ b/callgrind/docs/cl-format.xml
@@ -103,7 +103,7 @@ file also can contain association specifications. These look similar to
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 @@ for "Ir and "Dr".</para>
<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 @@ for "Ir and "Dr".</para>
<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 @@ for "Ir and "Dr".</para>
<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 @@ for "Ir and "Dr".</para>
</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 @@ for "Ir and "Dr".</para>
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 @@ for "Ir and "Dr".</para>
<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 @@ optional.</para>
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 369180ca5..508094e00 100644
--- a/callgrind/docs/cl-manual.xml
+++ b/callgrind/docs/cl-manual.xml
@@ -310,49 +310,78 @@ callgrind.out.<emphasis>pid</emphasis>.<emphasis>part</emphasis>-<emphasis>threa
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>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>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>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 c6d4de11b..8907995e5 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 @@ static void print_obj(VgFile *fp, const HChar* prefix, obj_node* obj)
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 @@ static void print_file(VgFile *fp, const char *prefix, const file_node* file)
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 @@ static void print_fn(VgFile *fp, const HChar* tag, const fn_node* fn)
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 @@ static void print_mangled_fn(VgFile *fp, const HChar* tag,
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 @@ static void print_mangled_fn(VgFile *fp, const HChar* tag,
/* 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 @@ static void print_mangled_fn(VgFile *fp, const HChar* tag,
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 @@ static Bool print_fn_pos(VgFile *fp, FnPos* last, BBCC* bbcc)
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 @@ static void fprint_apos(VgFile *fp, AddrPos* curr, AddrPos* last,
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 @@ static void fprint_apos(VgFile *fp, AddrPos* curr, AddrPos* last,
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 @@ void fprint_cost(VgFile *fp, const EventMapping* es, const ULong* cost)
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 @@ static void fprint_jcc(VgFile *fp, jCC* jcc, AddrPos* curr, AddrPos* last,
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 @@ static void fprint_jcc(VgFile *fp, jCC* jcc, AddrPos* curr, AddrPos* last,
*/
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 @@ static Bool fprint_bbcc(VgFile *fp, BBCC* bbcc, AddrPos* last)
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 @@ static Bool fprint_bbcc(VgFile *fp, BBCC* bbcc, AddrPos* last)
}
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 @@ BBCC** med3(BBCC **a, BBCC **b, BBCC **c, int (*cmp)(BBCC**,BBCC**))
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 @@ static void qsort(BBCC **a, int n, int (*cmp)(BBCC**,BBCC**))
}
}
- 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 @@ static void cs_addCount(thread_info* ti)
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 @@ BBCC** prepare_dump(void)
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 @@ static void print_bbccs_of_thread(thread_info* ti)
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 @@ static void print_bbccs_of_thread(thread_info* ti)
/* 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 @@ static void print_bbccs_of_thread(thread_info* ti)
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 95babcab3..e7ca68e45 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 0293043c0..b38b3c313 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 c348fd77d..243494146 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 @@ fn_node* CLG_(get_fn_node)(BB* bb)
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 @@ fn_node* CLG_(get_fn_node)(BB* bb)
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 @@ void CLG_(set_current_fn_array)(fn_array* a)
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 6f33050b4..bf511f74e 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 ae787b2fa..dbd453353 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 @@ static void resize_jcc_table(void)
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* CLG_(get_jcc)(BBCC* from, UInt jmp, BBCC* to)
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 5e501bc41..2a9d44ef1 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 @@ void log_cond_branch(InstrInfo* ii, Word taken)
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 @@ static void showEvent ( Event* ev )
{
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 @@ IRSB* CLG_(instrument)( VgCallbackClosure* closure,
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 @@ void clg_print_stats(void)
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 @@ void CLG_(pre_clo_init)(void)
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 7478a32ed..8fedbeac3 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 @@ CacheResult cachesim_ref(cache_t2* c, Addr a, UChar size)
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 @@ CacheResult cachesim_ref_wb(cache_t2* c, RefType ref, Addr a, UChar size)
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 @@ void cacheuse_initcache(cache_t2* c)
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 @@ static CacheModelResult cacheuse##_##L##_doRead(Addr a, UChar size) \
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 @@ static CacheModelResult cacheuse##_##L##_doRead(Addr a, UChar size) \
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 @@ static CacheModelResult cacheuse##_##L##_doRead(Addr a, UChar size) \
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 @@ static CacheModelResult cacheuse##_##L##_doRead(Addr a, UChar size) \
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 @@ static CacheModelResult cacheuse##_##L##_doRead(Addr a, UChar size) \
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 @@ block2: \
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 @@ block2: \
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 @@ block2: \
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 @@ static void update_LL_use(int idx, Addr memline)
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 @@ CacheModelResult cacheuse_LL_access(Addr memline, line_loaded* l1_loaded)
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 @@ CacheModelResult cacheuse_LL_access(Addr memline, line_loaded* l1_loaded)
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 @@ static CacheModelResult update##_##L##_use(cache_t2* cache, int idx, \
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 @@ static void log_1I1Dr(InstrInfo* ii, Addr data_addr, Word data_size)
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 @@ static void log_0I1Dr(InstrInfo* ii, Addr data_addr, Word data_size)
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 @@ static void log_1I1Dw(InstrInfo* ii, Addr data_addr, Word data_size)
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 @@ static void log_0I1Dw(InstrInfo* ii, Addr data_addr, Word data_size)
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 7dca771f0..2a38fc129 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 @@ void CLG_(switch_thread)(ThreadId tid)
{
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 @@ void CLG_(pre_signal)(ThreadId tid, Int sigNum, Bool alt_stack)
{
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 @@ void CLG_(post_signal)(ThreadId tid, Int sigNum)
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 @@ void CLG_(post_signal)(ThreadId tid, Int sigNum)
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 7faeac299..e93c882b8 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 @@ AM_CONDITIONAL(COMPILER_IS_ICC, test $is_clang = icc)
# 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 @@ case "${host_os}" in
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 @@ case "${host_os}" in
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 @@ esac
# 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 @@ case "$ARCH_MAX-$VGCONF_OS" in
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 @@ AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_X86,
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 @@ AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_X86_DARWIN,
-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_LINUX,
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 @@ AC_EGREP_CPP([BIONIC_LIBC], [
],
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 @@ case "${GLIBC_VERSION}" in
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 @@ AC_CHECK_MEMBER([pthread_mutex_t.__data.__kind],
[],
[#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_have_altivec=no
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_MSG_RESULT([yes])
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
+
+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(HAS_ISA_2_07, test x$ac_asm_have_isa_2_07 = xyes)
+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 @@ fi
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_SUBST(FLAG_M32)
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_SUBST(FLAG_M64)
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_SUBST(FLAG_MIPS32)
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_SUBST(FLAG_MIPS64)
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_SUBST(FLAG_OCTEON)
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_SUBST(FLAG_OCTEON2)
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_SUBST(FLAG_MMMX)
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_SUBST(FLAG_MSSE)
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 @@ CFLAGS=$safe_CFLAGS
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_GCC_WARNING_COND([pointer-sign], [HAS_POINTER_SIGN_WARNING])
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_NO],[
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 @@ AC_DEFUN([AC_GCC_WARNING_SUBST],[
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_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[
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 @@ AC_MSG_RESULT([-Wextra])
])
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 @@ CFLAGS=$safe_CFLAGS
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])
+
+safe_CFLAGS=$CFLAGS
+CFLAGS="-fno-ipa-icf -Werror"
-# Does this compiler support -fsanitize=undefined?
+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 @@ FLAG_FSANITIZE=""
LIB_UBSAN=""
AC_MSG_RESULT([no])
])
+])
CFLAGS=$safe_CFLAGS
AC_SUBST(FLAG_FSANITIZE)
AC_SUBST(LIB_UBSAN)
@@ -1838,7 +2067,7 @@ fi
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 @@ CFLAGS=$safe_CFLAGS
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 @@ AM_CONDITIONAL([HAVE_ASM_CONSTRAINT_P], [test x$ac_have_asm_constraint_p = xyes]
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 @@ AC_MSG_NOTICE([ld -Ttext used, need to strip build-id NOTEs.])
# 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 @@ if test x$ac_have_as_ppc_fpPO = xyes ; then
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 @@ AM_CONDITIONAL(BUILD_SSE3_TESTS, test x$ac_have_as_sse3 = xyes)
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 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
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 @@ AC_CACHE_CHECK([for TLS support], vg_cv_tls,
[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 @@ AC_CHECK_HEADERS([ \
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 @@ if test x$VGCONF_PLATFORM_PRI_CAPS = xX86_LINUX \
-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 @@ fi
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_LINUX],
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 @@ AM_CONDITIONAL([HAVE_BOOST_1_35], [test x$ac_have_boost_1_35 = xyes])
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 @@ AC_CONFIG_FILES([
perf/Makefile
perf/vg_perf
gdbserver_tests/Makefile
+ gdbserver_tests/solaris/Makefile
include/Makefile
auxprogs/Makefile
mpi/Makefile
@@ -2998,8 +4085,11 @@ AC_CONFIG_FILES([
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 @@ AC_CONFIG_FILES([
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 @@ AC_CONFIG_FILES([
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 f43d4c900..d29f9549e 100644
--- a/coregrind/Makefile.am
+++ b/coregrind/Makefile.am
@@ -44,19 +44,31 @@ valgrind_SOURCES = \
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 @@ if VGCONF_OS_IS_DARWIN
# 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 @@ vgdb_LDFLAGS = $(AM_CFLAGS_PRI) @LIB_UBSAN@
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 @@ noinst_HEADERS = \
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 @@ noinst_HEADERS = \
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 @@ noinst_HEADERS = \
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 @@ COREGRIND_SOURCES_COMMON = \
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 @@ COREGRIND_SOURCES_COMMON = \
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 @@ COREGRIND_SOURCES_COMMON = \
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 @@ COREGRIND_SOURCES_COMMON = \
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 @@ COREGRIND_SOURCES_COMMON = \
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 @@ COREGRIND_SOURCES_COMMON = \
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 @@ COREGRIND_SOURCES_COMMON = \
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 @@ COREGRIND_SOURCES_COMMON = \
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 @@ COREGRIND_SOURCES_COMMON = \
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 @@ vgpreload_core_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_LDFLAGS = \
$(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 d66ad20ab..9db6f46e5 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 @@ void modify_macho_loadcmds ( HChar* filename,
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 2b14697b1..8d429e118 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 a5ebb02fe..4d018f209 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 @@ static const char *select_platform(const char *clientname)
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 @@ static const char *select_platform(const char *clientname)
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 @@ int main(int argc, char** argv, char** envp)
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 @@ int main(int argc, char** argv, char** envp)
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 @@ int main(int argc, char** argv, char** envp)
(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 @@ int main(int argc, char** argv, char** envp)
/* 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 @@ int main(int argc, char** argv, char** envp)
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 000000000..795220fd8
--- /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 e6f58ee72..8c39b47b5 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_(describe_addr) ( Addr a, /*OUT*/AddrInfo* ai )
(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 @@ void VG_(describe_addr) ( Addr a, /*OUT*/AddrInfo* ai )
/* 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 @@ static void pp_addrinfo_WRK ( Addr a, const AddrInfo* ai, Bool mc,
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 @@ static void pp_addrinfo_WRK ( Addr a, const AddrInfo* ai, Bool mc,
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 @@ static void pp_addrinfo_WRK ( Addr a, const AddrInfo* ai, Bool mc,
}
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 @@ static void pp_addrinfo_WRK ( Addr a, const AddrInfo* ai, Bool mc,
}
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 @@ static void pp_addrinfo_WRK ( Addr a, const AddrInfo* ai, Bool mc,
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 @@ static void pp_addrinfo_WRK ( Addr a, const AddrInfo* ai, Bool mc,
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 17eccce2a..ea68bdfe8 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 a23587553..205e052ca 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 @@ SysRes VG_(am_do_mmap_NO_NOTIFY)( Addr start, SizeT length, UInt prot,
}
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 @@ SysRes ML_(am_open) ( const HChar* pathname, Int flags, Int mode )
# 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 @@ Int ML_(am_readlink)(const HChar* path, HChar* buf, UInt bufsiz)
# 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 @@ Bool ML_(am_get_fd_d_i_m)( Int fd,
/*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 @@ Bool ML_(am_get_fd_d_i_m)( Int fd,
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 @@ Bool ML_(am_resolve_filename) ( Int fd, /*OUT*/HChar* buf, Int nbuf )
}
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 ace28d613..7ce3c996e 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 @@ static Int nsegments_used = 0;
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 @@ static void show_nsegment_full ( Int logLevel, Int segNo, const NSegment* seg )
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 @@ static void show_nsegment ( Int logLevel, Int segNo, const NSegment* seg )
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 @@ static void show_nsegment ( Int logLevel, Int segNo, const NSegment* seg )
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 @@ static void show_nsegment ( Int logLevel, Int segNo, const NSegment* seg )
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 @@ static void sync_check_mapping_callback ( Addr addr, SizeT len, UInt prot,
"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 @@ static void sync_check_gap_callback ( Addr addr, SizeT len )
"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 @@ NSegment const * VG_(am_find_nsegment) ( Addr a )
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 @@ Bool VG_(am_is_valid_for_client_or_free_or_resvn)
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 @@ Bool VG_(am_addr_is_in_extensible_client_stack)( Addr addr )
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 @@ static void read_maps_callback ( Addr addr, SizeT len, UInt prot,
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 @@ Addr VG_(am_startup) ( Addr sp_at_startup )
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 @@ Addr VG_(am_startup) ( Addr sp_at_startup )
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 @@ Addr VG_(am_startup) ( Addr sp_at_startup )
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 VG_(am_get_advisory) ( const MapRequest* req,
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 @@ Addr VG_(am_get_advisory) ( const MapRequest* req,
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 @@ Addr VG_(am_get_advisory) ( const MapRequest* req,
}
/* 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 @@ Addr VG_(am_get_advisory) ( const MapRequest* req,
/* ------ 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 @@ Addr VG_(am_get_advisory) ( const MapRequest* req,
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 @@ Addr VG_(am_get_advisory) ( const MapRequest* req,
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 @@ Addr VG_(am_get_advisory) ( const MapRequest* req,
}
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 @@ Addr VG_(am_get_advisory) ( const MapRequest* req,
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 @@ Bool VG_(am_notify_munmap)( Addr start, SizeT len )
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 @@ SysRes VG_(am_mmap_named_file_fixed_client)
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 @@ Bool VG_(get_changed_segments)(
/*------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 7fcacf486..761608d91 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 @@ enum {
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 13d3dfff8..b5fd957df 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 811eb9192..63a515f29 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 e1a6040ae..7cbc7c741 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 @@ Addr VG_(clstk_start_base) = 0;
/* 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 @@ Int VG_(cl_cmdline_fd) = -1;
/* 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 @@ Addr VG_(client__dl_sysinfo_int80) = 0;
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 7ac496901..67b9277a6 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 f39a90f36..a6f5a3262 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 221bd7d3d..a9258a142 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 write_note(Int fd, const struct note *n)
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 @@ static void fill_prpsinfo(const ThreadState *tst,
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 000000000..3a12b78e6
--- /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 1473cadb7..9ba75ecc3 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 4582db0d5..000000000
--- 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 09d1b12a6..190ada1fe 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 Long read_leb128S( const UChar **data )
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 @@ GXResult ML_(evaluate_GX)( const GExpr* gx, const GExpr* fbGX,
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 31fd369bb..6f11cd230 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 void cfsi_m_cache__invalidate ( void );
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 @@ void VG_(di_initialise) ( void )
/*--- ---*/
/*--------------------------------------------------------------*/
-#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 @@ static void show_DebugInfoMappings
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 @@ static ULong di_notify_ACHIEVE_ACCEPT_STATE ( struct _DebugInfo* di )
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 @@ ULong VG_(di_notify_mmap)( Addr a, Bool allow_SkFileV, Int use_fd )
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 @@ ULong VG_(di_notify_mmap)( Addr a, Bool allow_SkFileV, Int use_fd )
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 @@ ULong VG_(di_notify_mmap)( Addr a, Bool allow_SkFileV, Int use_fd )
/* 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 @@ void VG_(di_notify_pdb_debuginfo)( Int fd_obj, Addr avma_obj,
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 @@ void VG_(di_notify_pdb_debuginfo)( Int fd_obj, Addr avma_obj,
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 @@ Vg_FnNameKind VG_(get_fnname_kind) ( const HChar* name )
# 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 @@ const HChar* VG_(describe_IP)(Addr eip, const InlIPCursor *iipc)
/* 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 @@ const HChar* VG_(describe_IP)(Addr eip, const InlIPCursor *iipc)
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 @@ const HChar* VG_(describe_IP)(Addr eip, const InlIPCursor *iipc)
// 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 @@ const HChar* VG_(describe_IP)(Addr eip, const InlIPCursor *iipc)
}
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 CFSI_m_CacheEnt cfsi_m_cache[N_CFSI_M_CACHE];
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 @@ Addr ML_(get_CFA) ( Addr ip, Addr sp, Addr fp,
# 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 @@ Bool VG_(use_FPO_info) ( /*MOD*/Addr* ipP,
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 @@ Bool VG_(use_FPO_info) ( /*MOD*/Addr* ipP,
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 @@ static void format_message ( /*MOD*/XArray* /* of HChar */ dn1,
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 @@ static void format_message ( /*MOD*/XArray* /* of HChar */ dn1,
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 @@ static void format_message ( /*MOD*/XArray* /* of HChar */ dn1,
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 @@ static void format_message ( /*MOD*/XArray* /* of HChar */ dn1,
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 @@ static void format_message ( /*MOD*/XArray* /* of HChar */ dn1,
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 @@ static void format_message ( /*MOD*/XArray* /* of HChar */ dn1,
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 @@ static void format_message ( /*MOD*/XArray* /* of HChar */ dn1,
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 @@ static void format_message ( /*MOD*/XArray* /* of HChar */ dn1,
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 @@ static void format_message ( /*MOD*/XArray* /* of HChar */ dn1,
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 @@ static void format_message ( /*MOD*/XArray* /* of HChar */ dn1,
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 @@ static void format_message ( /*MOD*/XArray* /* of HChar */ dn1,
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 @@ static void format_message ( /*MOD*/XArray* /* of HChar */ dn1,
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 @@ static void format_message ( /*MOD*/XArray* /* of HChar */ dn1,
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 @@ Bool consider_vars_in_frame ( /*MOD*/XArray* /* of HChar */ dname1,
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 @@ Bool VG_(get_data_description)(
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 @@ void analyse_deps ( /*MOD*/XArray* /* of FrameBlock */ blocks,
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 @@ void analyse_deps ( /*MOD*/XArray* /* of FrameBlock */ blocks,
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 @@ void analyse_deps ( /*MOD*/XArray* /* of FrameBlock */ blocks,
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 @@ void* /* really, XArray* of StackBlock */
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 @@ VgSectKind VG_(DebugInfo_sect_kind)( /*OUT*/const HChar** name, Addr a)
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 819a77097..1735ce6a3 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 @@ static void set_CEnt ( const DiImage* img, UInt entNo, DiOffT off )
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 @@ inline Bool ML_(img_valid)(const DiImage* img, DiOffT offset, SizeT size)
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 @@ static void ensure_valid(const DiImage* img, DiOffT offset, SizeT size,
{
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 14d3949c4..03cbf0377 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 4c0696663..b7eec6f74 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 083ed784d..9523f48b6 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 40a0e483d..d3adb7d89 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 fb2e19392..6cdf26e49 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 636153180..3cccc68e8 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 22c58e9ae..17d3761f5 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 8b21ffb14..49c1d1a1e 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 117a8c570..a423799cc 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 @@ HChar* ML_(find_name_of_pdb_file)( const HChar* pename );
#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 c7278e2ea..aa1d9f9fb 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 82fd90558..eae3701bb 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 4a0f75019..88d49e97f 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 @@ void process_extended_line_op( struct _DebugInfo* di,
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 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di,
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 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di,
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 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di,
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 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di,
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 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di,
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 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di,
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 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di,
}
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 @@ void ML_(read_debuginfo_dwarf3)
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 @@ void ML_(read_debuginfo_dwarf1) (
}
}
- /* Move on the the next DIE. */
+ /* Move on the next DIE. */
die_offset += die_szb;
} /* Looping over DIEs */
@@ -1719,11 +1722,11 @@ void ML_(read_debuginfo_dwarf1) (
/* --------------- 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 @@ enum dwarf_cfa_secondary_ops
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 @@ typedef
DiCursor ehframe_image;
Addr ehframe_avma;
Addr text_bias;
+ Addr got_avma;
}
AddressDecodingInfo;
@@ -2650,6 +2655,7 @@ static Addr step_encoded_Addr ( const AddressDecodingInfo* adi,
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 @@ static Addr step_encoded_Addr ( const AddressDecodingInfo* adi,
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 @@ static Int run_CF_instruction ( /*MOD*/UnwindContext* ctx,
}
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 @@ static Int show_CF_instruction ( DiCursor instrIN,
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 @@ static Int show_CF_instruction ( DiCursor instrIN,
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 @@ void ML_(read_callframe_info_dwarf3)
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 @@ void ML_(read_callframe_info_dwarf3)
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 @@ void ML_(read_callframe_info_dwarf3)
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 @@ void ML_(read_callframe_info_dwarf3)
}
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 @@ void ML_(read_callframe_info_dwarf3)
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 @@ void ML_(read_callframe_info_dwarf3)
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 @@ void ML_(read_callframe_info_dwarf3)
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 @@ void ML_(read_callframe_info_dwarf3)
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 @@ void ML_(read_callframe_info_dwarf3)
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 @@ void ML_(read_callframe_info_dwarf3)
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 89f247aa5..cfc9e595b 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 @@ static GExpr* make_general_GX ( const CUConst* cc,
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 @@ static void init_ht_abbvs (CUConst* cc,
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 @@ void parse_CU_Header ( /*OUT*/CUConst* cc,
= 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 @@ void parse_CU_Header ( /*OUT*/CUConst* cc,
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 @@ void get_Form_contents ( /*OUT*/FormContents* cts,
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 @@ void get_Form_contents ( /*OUT*/FormContents* cts,
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 @@ UInt get_Form_szB (const CUConst* cc, DW_FORM form )
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 @@ typedef
(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 @@ void read_filename_table( /*MOD*/XArray* /* of UInt* */ fndn_ix_Table,
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 @@ static void parse_var_DIE (
&& 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 @@ static Bool parse_inl_DIE (
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 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents,
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 @@ void new_dwarf3_reader_wrk (
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 @@ void new_dwarf3_reader_wrk (
/* .. 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 @@ void new_dwarf3_reader_wrk (
} 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 @@ ML_(new_dwarf3_reader) (
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 fda416122..9e239b0f2 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 @@ void read_elf_symtab__normal(
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 @@ void read_elf_symtab__ppc64be_linux(
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 @@ void read_elf_symtab__ppc64be_linux(
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
}
}
- 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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
# 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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
} /* 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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
_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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
(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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
/* 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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
}
}
}
- 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 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
/* 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 727deb32c..06a9a5f38 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 @@ typedef
/* 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 @@ static void* Prel31ToAddr(const void* addr)
offset64 |= 0xFFFFFFFF80000000ULL;
else
offset64 &= 0x000000007FFFFFFFULL;
- return ((UChar*)addr) + (UWord)offset64;
+ return ((const UChar*)addr) + (UWord)offset64;
}
@@ -242,9 +242,9 @@ ExExtractResult ExtabEntryExtract ( MemoryRange* mr_exidx,
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 @@ ExExtractResult ExtabEntryExtract ( MemoryRange* mr_exidx,
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 @@ ExExtractResult ExtabEntryExtract ( MemoryRange* mr_exidx,
// 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 @@ ExExtractResult ExtabEntryExtract ( MemoryRange* mr_exidx,
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 @@ Int ExtabEntryDecode(/*OUT*/SummState* state, const UChar* buf, SizeT buf_size)
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 @@ Bool setCFAfromCFIR( /*MOD*/DiCfSI_m* cfi, XArray*/*CfiExpr*/ cfsi_exprs,
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 @@ void ML_(read_exidx) ( /*MOD*/DebugInfo* di,
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 @@ void ML_(read_exidx) ( /*MOD*/DebugInfo* di,
// 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 @@ void ML_(read_exidx) ( /*MOD*/DebugInfo* di,
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 f359d575b..98ab048e9 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 @@ void read_symtab( /*OUT*/XArray* /* DiSym */ syms,
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 3a0d42224..8b63e9562 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_jg_init( struct pdb_reader* reader,
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 @@ void pdb_check_root_version_and_timestamp( const HChar* pdbname,
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 @@ static ULong DEBUG_SnarfCodeView(
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 @@ static ULong DEBUG_SnarfCodeView(
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 @@ static ULong DEBUG_SnarfCodeView(
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 @@ static ULong codeview_dump_linetab2(
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 @@ static ULong codeview_dump_linetab2(
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 @@ static ULong codeview_dump_linetab2(
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 @@ static void pdb_dump( const struct pdb_reader* pdb,
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 @@ static void pdb_dump( const struct pdb_reader* pdb,
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 @@ Bool ML_(read_pdb_debug_info)(
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 @@ HChar* ML_(find_name_of_pdb_file)( const HChar* pename )
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 @@ HChar* ML_(find_name_of_pdb_file)( const HChar* pename )
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 926a13f71..45bc13522 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 @@ void ML_(ppSym) ( Int idx, const DiSym* sym )
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 @@ void ML_(ppDiCfSI) ( const XArray* /* of CfiExpr */ exprs,
} \
} 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 @@ void ML_(addLineInfo) ( struct _DebugInfo* di,
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 @@ void ML_(addInlInfo) ( struct _DebugInfo* di,
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 @@ void show_scope ( OSet* /* of DiAddrRange */ scope, const HChar* who )
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 @@ Bool preferName ( const DebugInfo* di,
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 @@ static void canonicaliseLoctab ( struct _DebugInfo* di )
/* 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 @@ void ML_(canonicaliseCFI) ( struct _DebugInfo* di )
}
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 1ee62f960..839e54621 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 @@ void ML_(pp_TyEnt)( const TyEnt* te )
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 @@ void ML_(pp_TyEnt)( const TyEnt* te )
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 469c69467..dc6e26d2e 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 @@ static UInt local_sys_getpid ( void )
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 51a58cb06..92016d88c 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 Word cmp_pool_elt (const void* node1, const void* node2 )
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 7fc2722f9..46cc3b536 100644
--- a/coregrind/m_demangle/cplus-dem.c
+++ b/coregrind/m_demangle/cplus-dem.c
@@ -2666,7 +2666,7 @@ iterate_demangle_function (struct work_stuff *work, const char **mangled,
/* 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 1054c147b..78db073be 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 @@ Bool VG_(maybe_Z_demangle) ( const HChar* sym,
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 5241cbe65..883250000 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 02a860019..dd7f11704 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 @@ VG_(disp_cp_evcheck_fail):
#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 245f693cd..bb7a0378c 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 @@ VG_(disp_cp_evcheck_fail):
.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 000000000..375069348
--- /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 9d5b1fcf7..c21e5e4fb 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 @@ VG_(disp_cp_evcheck_fail):
.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 9531275e2..2e8e0cd9f 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 @@ VG_(disp_cp_evcheck_fail):
.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 a3a158cd2..22b6b382a 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 @@ VG_(disp_cp_evcheck_fail):
.size VG_(disp_run_translations), .-VG_(disp_run_translations)
+#endif // defined(VGP_mips32_linux)
-/* Let the linker know we do not need an executable stack */
-.section .note.GNU-stack,"",@progbits
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
-#endif // defined(VGP_mips32_linux)
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/
diff --git a/coregrind/m_dispatch/dispatch-mips64-linux.S b/coregrind/m_dispatch/dispatch-mips64-linux.S
index c2fc69da8..5e5afee06 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 @@ VG_(disp_cp_evcheck_fail):
.size VG_(disp_run_translations), .-VG_(disp_run_translations)
+#endif // defined(VGP_mips64_linux)
-/* Let the linker know we do not need an executable stack */
-.section .note.GNU-stack,"",@progbits
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
-#endif // defined(VGP_mips64_linux)
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/
diff --git a/coregrind/m_dispatch/dispatch-ppc32-linux.S b/coregrind/m_dispatch/dispatch-ppc32-linux.S
index 770a05882..2304b85cb 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 @@ LafterFP1:
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 @@ VG_(disp_cp_evcheck_fail):
.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 945fa29d4..64e192a46 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 @@ VG_(disp_cp_evcheck_fail):
.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 7e5bc0dc7..177228341 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 @@ VG_(disp_cp_evcheck_fail):
.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 d7d05ab4e..aec65ba40 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 @@ VG_(disp_cp_evcheck_fail):
.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 3451fe5d2..b3114efce 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 @@ fast_lookup_failed:
.size VG_(disp_run_translations), .-VG_(disp_run_translations)
+#endif /* defined(VGP_tilegx_linux) */
- /* Let the linker know we do not need an executable stack */
- .section .note.GNU-stack,"",@progbits
+/* Let the linker know we don't need an executable stack */
+MARK_STACK_NO_EXEC
-#endif /* defined(VGP_tilegx_linux) */
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/
diff --git a/coregrind/m_dispatch/dispatch-x86-darwin.S b/coregrind/m_dispatch/dispatch-x86-darwin.S
index b6647cee6..d5edbab9f 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 @@ VG_(disp_cp_evcheck_fail):
#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 20517da3f..6845911b3 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 @@ VG_(disp_cp_evcheck_fail):
.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 000000000..88f796c2a
--- /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 2ea6370f1..a46c6c36c 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 @@ static Bool eq_Error ( VgRes res, const Error* e1, const Error* e2 )
} 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 @@ Bool VG_(is_action_requested) ( const HChar* action, Bool* clo )
/* 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 @@ void do_actions_on_error(const Error* err, Bool allow_db_attach)
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 @@ static void pp_Error ( const Error* err, Bool allow_db_attach, Bool xml )
/* 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 @@ static void pp_Error ( const Error* err, Bool allow_db_attach, Bool xml )
&& 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 @@ void VG_(show_all_errors) ( Int verbosity, Bool xml )
/* 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 @@ void VG_(show_all_errors) ( Int verbosity, Bool xml )
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 @@ void VG_(show_all_errors) ( Int verbosity, Bool xml )
// 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 @@ Bool supp_matches_error(const Supp* su, const Error* err)
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 f738279d4..c074f618e 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 888340ae0..d5cc8eae4 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 @@ Bool VG_(is_watched)(PointKind kind, Addr addr, Int szB)
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 @@ static void clear_gdbserved_addresses(Bool clear_only_jumps)
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 @@ void VG_(gdbserver_prerun_action) (ThreadId tid)
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 @@ static void call_gdbserver ( ThreadId tid , CallReason reason)
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 @@ static void call_gdbserver ( ThreadId tid , CallReason reason)
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 @@ static void call_gdbserver ( ThreadId tid , CallReason reason)
}
/* 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 @@ void VG_(gdbserver) ( ThreadId tid )
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 int interrupts_non_interruptible = 0;
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 @@ static void give_control_back_to_vgdb(void)
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 @@ void VG_(invoke_gdbserver) ( int check )
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 @@ static void dlog_signal (const HChar *who, const vki_siginfo_t *info,
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 @@ Bool VG_(gdbserver_report_signal) (vki_siginfo_t *info, ThreadId tid)
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 @@ void VG_(gdbserver_status_output)(void)
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 978e07c8b..f6f3d0bcf 100644
--- a/coregrind/m_gdbserver/remote-utils.c
+++ b/coregrind/m_gdbserver/remote-utils.c
@@ -53,7 +53,7 @@ void sr_extended_perror (SysRes sr, const HChar *msg)
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 @@ void remote_open (const HChar *name)
{
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 @@ int fromhex (int a)
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 @@ int putpkt_binary (char *buf, int cnt)
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 @@ int getpkt (char *buf)
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 @@ void prepare_resume_reply (char *buf, char status, unsigned char sig)
((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 6361c5aca..23a43e0a9 100644
--- a/coregrind/m_gdbserver/server.c
+++ b/coregrind/m_gdbserver/server.c
@@ -244,10 +244,11 @@ int handle_gdb_valgrind_command (char *mon, OutputSink *sink_wanted_at_return)
" 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 @@ int handle_gdb_valgrind_command (char *mon, OutputSink *sink_wanted_at_return)
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 @@ int handle_gdb_valgrind_command (char *mon, OutputSink *sink_wanted_at_return)
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 @@ int handle_gdb_valgrind_command (char *mon, OutputSink *sink_wanted_at_return)
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 @@ void handle_query (char *arg_own_buf, int *new_packet_len_p)
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 @@ void handle_query (char *arg_own_buf, int *new_packet_len_p)
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 @@ void handle_query (char *arg_own_buf, int *new_packet_len_p)
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 @@ void handle_query (char *arg_own_buf, int *new_packet_len_p)
/* 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 @@ void server_main (void)
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 69aa9b183..a9128a6ea 100644
--- a/coregrind/m_gdbserver/signals.c
+++ b/coregrind/m_gdbserver/signals.c
@@ -741,7 +741,7 @@ int do_target_signal_to_host (enum target_signal oursig,
}
#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 64ce5a31e..3d54b7503 100644
--- a/coregrind/m_gdbserver/target.c
+++ b/coregrind/m_gdbserver/target.c
@@ -44,7 +44,7 @@ static
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 @@ void valgrind_update_threads (int pid)
/* 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 @@ unsigned char valgrind_wait (char *ourstatus)
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 @@ unsigned char valgrind_wait (char *ourstatus)
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 @@ void fetch_register (int regno)
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 @@ void usr_store_inferior_registers (int regno)
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 @@ Bool valgrind_get_tls_addr (ThreadState *tst,
// 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 @@ void set_desired_inferior (int use_general)
{
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 1cacc1eaf..2ea8de9ca 100644
--- a/coregrind/m_gdbserver/target.h
+++ b/coregrind/m_gdbserver/target.h
@@ -211,7 +211,7 @@ extern int valgrind_remove_watchpoint (char type, CORE_ADDR addr, int len);
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 511b1e605..83295a195 100644
--- a/coregrind/m_gdbserver/utils.c
+++ b/coregrind/m_gdbserver/utils.c
@@ -30,7 +30,7 @@ void sr_perror (SysRes sr, const char *string,...)
{
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 81ccafeff..5d58850ef 100644
--- a/coregrind/m_gdbserver/valgrind-low-tilegx.c
+++ b/coregrind/m_gdbserver/valgrind-low-tilegx.c
@@ -225,11 +225,13 @@ void transfer_register ( ThreadId tid, int abs_regno, void * buf,
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 bebcaab61..fd6bb4230 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 @@ VgHashTable *VG_(HT_construct) ( const HChar* name )
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 @@ void VG_(HT_print_stats) ( const VgHashTable *table, HT_Cmp_t cmp )
|| 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 @@ void VG_(HT_print_stats) ( const VgHashTable *table, HT_Cmp_t cmp )
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 cd6e2ffe1..5bec6dbab 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 140eb780e..1911e2b13 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 @@ Addr setup_client_stack( void* init_sp,
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 @@ Addr setup_client_stack( void* init_sp,
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 @@ Addr setup_client_stack( void* init_sp,
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 @@ Addr setup_client_stack( void* init_sp,
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 @@ IIFinaliseImageInfo VG_(ii_create_image)( IICreateImageInfo iicii,
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 @@ IIFinaliseImageInfo VG_(ii_create_image)( IICreateImageInfo iicii,
(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 17da98c0b..5b218fb9b 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 000000000..ee4f155c0
--- /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 9b4d2b90f..e74383636 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 566dd8496..c393d7b73 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 @@ void VG_(exit_now)( Int status )
{
#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 @@ static void show_sched_status_wrk ( Bool host_stacktrace,
}
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 @@ static void show_sched_status_wrk ( Bool host_stacktrace,
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 @@ void VG_(tool_panic) ( const HChar* str )
}
/* 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 60cad365e..0d715fa6d 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 @@ void* VG_(memcpy) ( void *dest, const void *src, SizeT sz )
}
/* 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 ce442ec78..68fc43438 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 @@ Int VG_(safe_fd)(Int oldfd)
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 @@ Bool VG_(resolve_filename) ( Int fd, const HChar** result )
}
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 @@ SysRes VG_(mknod) ( const HChar* pathname, Int mode, UWord dev )
# 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 @@ SysRes VG_(open) ( const HChar* pathname, Int flags, Int mode )
# 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 @@ Int VG_(fd_open) (const HChar* pathname, Int flags, Int mode)
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 @@ void VG_(close) ( Int fd )
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_(read) ( Int fd, void* buf, Int count)
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 @@ Int VG_(pipe) ( Int fd[2] )
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 @@ Off64T VG_(lseek) ( Int fd, Off64T offset, Int whence )
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 @@ SysRes VG_(stat) ( const HChar* file_name, struct vg_stat* vgbuf )
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 @@ Int VG_(fstat) ( Int fd, struct vg_stat* vgbuf )
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 @@ Int VG_(fstat) ( Int fd, struct vg_stat* vgbuf )
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 @@ Bool VG_(is_dir) ( const HChar* f )
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 @@ SysRes VG_(dup2) ( Int oldfd, Int newfd )
/* 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 @@ Int VG_(rename) ( const HChar* old_name, const HChar* new_name )
# 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 @@ Int VG_(unlink) ( const HChar* file_name )
# 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 @@ static Bool startup_wd_acquired = False;
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 @@ SysRes VG_(poll) (struct vki_pollfd *fds, Int nfds, Int timeout)
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 @@ SSizeT VG_(readlink) (const HChar* path, HChar* buf, SizeT bufsiz)
# 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 @@ Int VG_(access) ( const HChar* path, Bool irusr, Bool iwusr, Bool ixusr )
| (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 @@ SysRes VG_(pread) ( Int fd, void* buf, Int count, OffT offset )
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 @@ UShort VG_(ntohs) ( UShort x )
*/
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 @@ Int VG_(socket) ( Int domain, Int type, Int protocol )
}
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 @@ Int my_connect ( Int sockfd, struct vki_sockaddr_in* serv_addr, Int addrlen )
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 @@ Int VG_(write_socket)( Int sd, const void *msg, Int count )
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 @@ Int VG_(getsockname) ( Int sd, struct vki_sockaddr *name, Int *namelen)
(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 @@ Int VG_(getpeername) ( Int sd, struct vki_sockaddr *name, Int *namelen)
(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 @@ Int VG_(getsockopt) ( Int sd, Int level, Int optname, void *optval,
(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 @@ Int VG_(setsockopt) ( Int sd, Int level, Int optname, void *optval,
(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 114467fb1..1283de59d 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 @@ const HChar *VG_(sr_as_string) ( SysRes sr )
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 f25320a20..f314b55ee 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 @@ HChar** VG_(client_envp) = NULL;
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 @@ HChar *VG_(getenv)(const HChar *varname)
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 @@ void VG_(env_unsetenv) ( HChar **env, const HChar *varname )
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 @@ static void mash_colon_env(HChar *varp, const HChar *remove_pattern)
}
-// 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 @@ void VG_(env_remove_valgrind_env_stuff)(HChar** envp)
// - 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 @@ void VG_(env_remove_valgrind_env_stuff)(HChar** envp)
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 @@ Int VG_(waitpid)(Int pid, Int *status, Int options)
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 @@ HChar **VG_(env_clone) ( HChar **oldenv )
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 @@ void VG_(execv) ( const HChar* filename, HChar** argv )
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,54 +462,136 @@ void VG_(execv) ( const HChar* filename, HChar** argv )
VG_(printf)("EXEC failed, errno = %lld\n", (Long)sr_Err(res));
}
-/* Return -1 if error, else 0. NOTE does not indicate return code of
- child! */
-Int VG_(system) ( const HChar* cmd )
+/* Spawns a new child. Uses either spawn syscall or fork+execv combo. */
+Int VG_(spawn) ( const HChar *filename, const HChar **argv )
{
- Int pid;
- if (cmd == NULL)
- return 1;
- pid = VG_(fork)();
+ 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 */
- const HChar* argv[4] = { "/bin/sh", "-c", cmd, 0 };
- VG_(execv)(argv[0], CONST_CAST(HChar **,argv));
+ VG_(execv)(argv[0], 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:
-
- 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);
-
- 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;
+ 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 )
+{
+ Int pid;
+ if (cmd == NULL)
+ return 1;
+
+ const HChar *argv[4] = { "/bin/sh", "-c", cmd, 0 };
+ pid = VG_(spawn)(argv[0], argv);
+ if (pid < 0)
+ return -1;
+
+ 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);
+
+ 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;
}
Int VG_(sysctl)(Int *name, UInt namelen, void *oldp, SizeT *oldlenp, void *newp, SizeT newlen)
@@ -392,7 +599,7 @@ Int VG_(sysctl)(Int *name, UInt namelen, void *oldp, SizeT *oldlenp, void *newp,
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 @@ Int VG_(gettid)(void)
// 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_(getpid) ( void )
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 @@ Int VG_(getgroups)( Int size, UInt* list )
# 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_(getgroups)( Int size, UInt* list )
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 @@ Int VG_(fork) ( void )
}
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 @@ UInt VG_(read_millisecond_timer) ( void )
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 @@ UInt VG_(read_millisecond_timer) ( void )
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 @@ void VG_(invalidate_icache) ( void *ptr, SizeT nbytes )
# 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 df56e3b09..81a1a538a 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 a380f05f6..557e219de 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 @@ Bool VG_(isemptysigset)( const vki_sigset_t* set )
{
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 @@ Bool VG_(isfullsigset)( const vki_sigset_t* set )
{
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 @@ Bool VG_(iseqsigset)( const vki_sigset_t* set1, const vki_sigset_t* set2 )
{
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 @@ void VG_(sigcomplementset)( vki_sigset_t* dst, const vki_sigset_t* src )
*/
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 @@ Int VG_(sigaction) ( Int signum,
}
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 @@ void
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 @@ VG_(convert_sigaction_fromK_to_toK)( const vki_sigaction_fromK_t* fromK,
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 @@ Int VG_(tkill)( Int lwpid, Int signo )
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 @@ Int VG_(sigtimedwait_zero)( const vki_sigset_t *set,
/* 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 @@ Int VG_(sigtimedwait_zero)( const vki_sigset_t *set,
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 33fab901a..034511caf 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 be189a0c9..e5b393c94 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 @@ _semaphore_wait_signal:
#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 b9bf99b06..556406033 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 @@ _semaphore_wait_signal:
#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 99afb7ddc..6110c930f 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 @@ static void apply_to_GPs_of_tid(ThreadId tid, void (*f)(ThreadId,
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 @@ static void handler_unsup_insn ( Int x ) {
/* 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 VG_(machine_get_hwcaps)( void )
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 @@ Bool VG_(machine_get_hwcaps)( void )
// 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 @@ Bool VG_(machine_get_hwcaps)( void )
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 @@ Bool VG_(machine_get_hwcaps)( void )
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 @@ void* VG_(fnptr_to_fnentry)( void* f )
|| 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 9f98e11a7..1821c9412 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 @@ static void usage_NORETURN ( Bool debug_help )
" 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 @@ static void usage_NORETURN ( Bool debug_help )
" --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 @@ static void usage_NORETURN ( Bool debug_help )
" --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 @@ static void usage_NORETURN ( Bool debug_help )
" 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 @@ static void usage_NORETURN ( Bool debug_help )
/* '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 @@ static void early_process_cmd_line_options ( /*OUT*/Int* need_help,
// 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 @@ void main_process_cmd_line_options ( /*OUT*/Bool* logging_to_fd,
}
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 @@ void main_process_cmd_line_options ( /*OUT*/Bool* logging_to_fd,
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 @@ void main_process_cmd_line_options ( /*OUT*/Bool* logging_to_fd,
/* 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 @@ void main_process_cmd_line_options ( /*OUT*/Bool* logging_to_fd,
"--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 @@ static void print_preamble ( Bool logging_to_fd,
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 @@ static void print_preamble ( Bool logging_to_fd,
* (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 @@ static void print_preamble ( Bool logging_to_fd,
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 @@ static void print_preamble ( Bool logging_to_fd,
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 @@ static void setup_file_descriptors(void)
# 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 @@ static void setup_file_descriptors(void)
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 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp )
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 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp )
// 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 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp )
}
/* 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 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp )
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 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp )
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 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp )
iters = 10;
# elif defined(VGO_darwin)
iters = 3;
+# elif defined(VGO_solaris)
+ iters = 10;
# else
# error "Unknown plat"
# endif
@@ -2183,6 +2203,10 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp )
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 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp )
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 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp )
// 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 @@ void shutdown_actions_NORETURN( ThreadId tid,
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 @@ void _start_in_C_darwin ( UWord* pArgc )
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 @@ __fixunsdfdi(double a)
/*=== 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 1c4ac5045..e52275447 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 @@ Superblock* newSuperblock ( Arena* a, SizeT cszB )
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 @@ void reclaimSuperblock ( Arena* a, Superblock* sb)
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 @@ void ppSuperblocks ( Arena* a )
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 @@ static void sanity_check_malloc_arena ( ArenaId aid )
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 @@ static void sanity_check_malloc_arena ( ArenaId aid )
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 @@ static void sanity_check_malloc_arena ( ArenaId aid )
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 @@ static void sanity_check_malloc_arena ( ArenaId aid )
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 @@ void* VG_(arena_malloc) ( ArenaId aid, const HChar* cc, SizeT req_pszB )
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 @@ void deferred_reclaimSuperblock ( Arena* a, Superblock* sb)
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 @@ void VG_(arena_free) ( ArenaId aid, void* ptr )
/*
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 @@ void VG_(arena_realloc_shrink) ( ArenaId aid,
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 24938aafb..7e920e062 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_(clo_vgdb_prefix) = NULL;
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 @@ UInt VG_(clo_max_threads) = MAX_THREADS_DEFAULT;
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 @@ static HChar const* consume_field ( HChar const* c ) {
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 d1b172936..3fd214f0f 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 @@ struct _OSet {
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 @@ void VG_(OSetGen_Destroy)(AvlTree* t)
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 @@ void VG_(OSetGen_ResetIterAt)(AvlTree* oset, const void* k)
/*--- 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 ef2f214a5..ed203ceee 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 daed001c5..b085d2968 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 @@ void VG_(lookupRangeMap) ( /*OUT*/UWord* key_min, /*OUT*/UWord* key_max,
*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 09e6a9f69..7e4df8da6 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 @@ void VG_(redir_notify_new_DebugInfo)( const DebugInfo* newdi )
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 @@ void VG_(redir_notify_new_DebugInfo)( const DebugInfo* newdi )
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 @@ void VG_(redir_notify_new_DebugInfo)( const DebugInfo* newdi )
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 @@ void VG_(redir_notify_new_DebugInfo)( const DebugInfo* newdi )
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 @@ void VG_(redir_initialise) ( void )
);
}
+# 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 9bf40dbe4..c31add04c 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 060cb15a6..ccac13064 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 @@ static void init(void);
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 @@ static void init(void);
//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 @@ static void init(void);
//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 @@ static void init(void);
//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 @@ static void init(void);
//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 @@ static void init(void);
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 @@ static void init(void);
//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 @@ static void init(void);
//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 @@ static void init(void);
//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 @@ static void init(void);
//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 @@ static void init(void);
//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 @@ static void init(void);
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 @@ static void init(void);
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 @@ static void init(void);
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 @@ static void init(void);
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 @@ static void init(void);
#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 @@ static void init(void);
/* 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 @@ static size_t my_malloc_size ( void* zone, void* ptr )
}
/* 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 @@ static vki_malloc_zone_t vg_default_zone = {
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 @@ ZONE_SET_NAME(SO_SYN_MALLOC, malloc_set_zone_name);
#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 f64260fc2..25683f6b3 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 @@ void show_SB_profile ( const SBProfEntry tops[], UInt n_tops,
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 @@ void show_SB_profile ( const SBProfEntry tops[], UInt n_tops,
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 @@ void show_SB_profile ( const SBProfEntry tops[], UInt n_tops,
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 @@ void show_SB_profile ( const SBProfEntry tops[], UInt n_tops,
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 58e2ea326..ae291b1d0 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 9a951ca30..aa2b78cbb 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 bef7b4fe1..49ea81377 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 939bc4fe4..e9de6f9cf 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 dd2532194..0afdae027 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 80fdf6a99..1234d5605 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 @@ void VG_(print_scheduler_stats)(void)
"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 struct sched_lock *the_BigLock;
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 @@ const HChar* name_of_sched_event ( UInt event )
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 @@ void VG_(acquire_BigLock)(ThreadId tid, const HChar* who)
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 @@ void VG_(get_thread_out_of_syscall)(ThreadId tid)
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 @@ void VG_(vg_yield)(void)
/*
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 @@ static void os_state_clear(ThreadState *tst)
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 @@ void VG_(scheduler_init_phase2) ( ThreadId tid_main,
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 @@ void VG_(scheduler_init_phase2) ( ThreadId tid_main,
_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 @@ static void do_pre_run_checks ( volatile ThreadState* tst )
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 @@ void run_thread_for_a_while ( /*OUT*/HWord* two_words,
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 @@ static void handle_syscall(ThreadId tid, UInt trc)
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 @@ static void handle_syscall(ThreadId tid, UInt trc)
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 @@ VgSchedReturnCode VG_(scheduler) ( ThreadId tid )
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 @@ VgSchedReturnCode VG_(scheduler) ( ThreadId tid )
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 @@ VgSchedReturnCode VG_(scheduler) ( ThreadId tid )
# 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 @@ void VG_(nuke_all_threads_except) ( ThreadId me, VgSchedReturnCode src )
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 @@ Int print_client_message( ThreadId tid, const HChar *format,
*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 @@ void do_client_request ( ThreadId tid )
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 @@ void scheduler_sanity ( ThreadId tid )
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 @@ void VG_(sanity_check_general) ( Bool force_expensive )
|| (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 @@ void VG_(sanity_check_general) ( Bool force_expensive )
= 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 44f27f242..b5637686a 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 e94a6d402..45904813d 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 @@ static void acquire_sched_lock(struct sched_lock *p)
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 @@ static void acquire_sched_lock(struct sched_lock *p)
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 @@ static void release_sched_lock(struct sched_lock *p)
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 @@ static void release_sched_lock(struct sched_lock *p)
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 57ca3b0cc..668e99905 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 20402bfcf..281d7199f 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 @@ struct hacky_sigframe {
/* 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 @@ struct hacky_sigframe {
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 @@ void VG_(sigframe_create) ( ThreadId tid,
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 @@ void VG_(sigframe_create) ( ThreadId tid,
/* 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 @@ void VG_(sigframe_create) ( ThreadId tid,
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 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
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 0c1c7b416..fa34624d4 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 @@ static Addr build_rt_sigframe(ThreadState *tst,
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 @@ void VG_(sigframe_create)( ThreadId tid,
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 @@ Bool restore_vg_sigframe ( ThreadState *tst,
{
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 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
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 b374257ae..185367c1a 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 @@ static void build_sigframe(ThreadState *tst,
/* 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 @@ void VG_(sigframe_create)( ThreadId tid,
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 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
struct vg_sig_private *priv;
Addr sp;
UInt frame_size;
- struct vki_sigcontext *mc;
Int sigNo;
Bool has_siginfo = isRT;
@@ -258,14 +258,12 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
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 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
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 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
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 6e80659dd..a0134e4c3 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 @@ static void build_sigframe(ThreadState *tst,
/* 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 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
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 48bd2475b..8c513fff0 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 @@ static void track_frame_memory ( Addr addr, SizeT size, ThreadId tid )
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 @@ Bool ML_(sf_maybe_extend_stack) ( const ThreadState *tst, Addr addr,
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 4b23dc746..a95a661e3 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 @@ void setup_sigcontext2 ( ThreadState* tst, struct vki_sigcontext **sc1,
/* 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 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
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 5e0f44ac1..f21e2c7e5 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 @@ static void setup_sigcontext ( ThreadState* tst, struct vki_sigcontext **sc1,
/* 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 @@ void VG_(sigframe_destroy) ( ThreadId tid, Bool isRT )
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 8047f275f..2a496febd 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 @@ void stack_mcontext ( struct vki_mcontext *mc,
/* 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 @@ void VG_(sigframe_create)( ThreadId tid,
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 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
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 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
//.. 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 ec4d883a2..c5f530110 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 @@ struct rt_sigframe {
/* 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 @@ void VG_(sigframe_create)( ThreadId tid,
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 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
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 fb70c7635..3f106f901 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 @@ static Addr build_rt_sigframe(ThreadState *tst,
/* 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 @@ Bool restore_vg_sigframe ( ThreadState *tst,
{
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 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
Addr sp;
ThreadState* tst;
SizeT size;
- Int sigNo;
+ Int sigNo;
tst = VG_(get_ThreadState)(tid);
@@ -514,7 +515,7 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
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 000000000..c19fb1fd7
--- /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 3448ff886..52cbf4b34 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 @@ void VG_(sigframe_create)( ThreadId tid,
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 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
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 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
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 01f87da02..2e6492f33 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 @@ struct hacky_sigframe {
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 @@ struct hacky_sigframe {
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 @@ void VG_(sigframe_create) ( ThreadId tid,
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 @@ void VG_(sigframe_create) ( ThreadId tid,
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 @@ void VG_(sigframe_create) ( ThreadId tid,
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 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
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 3db225126..3a46bfd32 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 @@ static Addr build_rt_sigframe(ThreadState *tst,
/* 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 @@ void VG_(sigframe_create)( ThreadId tid,
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 @@ Bool restore_vg_sigframe ( ThreadState *tst,
{
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 @@ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
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 78e2a6d0d..db756cb36 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 @@ typedef struct SigQueue {
(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 @@ typedef struct SigQueue {
(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 @@ typedef struct SigQueue {
#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 @@ static SCSS scss;
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 @@ void calculate_SKSS_from_SCSS ( SKSS* dst )
/* 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 @@ extern void my_sigreturn(void);
".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 @@ extern void my_sigreturn(void);
" 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 @@ static void handle_SCSS_change ( Bool force_update )
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 @@ static void handle_SCSS_change ( Bool force_update )
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 @@ SysRes VG_(do_sys_sigaltstack) ( ThreadId tid, vki_stack_t* ss, vki_stack_t* oss
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 @@ SysRes VG_(do_sys_sigaction) ( Int signo,
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 @@ SysRes VG_(do_sys_sigaction) ( Int signo,
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 @@ void do_setmask ( ThreadId tid,
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 @@ static
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 @@ void push_signal_frame ( ThreadId tid, const vki_siginfo_t *siginfo,
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 @@ void push_signal_frame ( ThreadId tid, const vki_siginfo_t *siginfo,
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 @@ const HChar *VG_(signame)(Int sigNo)
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 @@ const HChar *VG_(signame)(Int sigNo)
# 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 @@ void VG_(kill_self)(Int sigNo)
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 @@ void VG_(kill_self)(Int sigNo)
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 @@ void VG_(kill_self)(Int sigNo)
// 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 @@ static Bool is_signal_from_kernel(ThreadId tid, int signum, int si_code)
# 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 @@ static void default_action(const vki_siginfo_t *info, ThreadId tid)
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 @@ static void default_action(const vki_siginfo_t *info, ThreadId tid)
# 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 @@ static void default_action(const vki_siginfo_t *info, ThreadId tid)
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 @@ static void default_action(const vki_siginfo_t *info, ThreadId tid)
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 @@ static void default_action(const vki_siginfo_t *info, ThreadId tid)
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 @@ static void deliver_signal ( ThreadId tid, const vki_siginfo_t *info,
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 @@ void VG_(synth_sigtrap)(ThreadId tid)
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 @@ void queue_signal(ThreadId tid, const vki_siginfo_t *si)
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 @@ void queue_signal(ThreadId tid, const vki_siginfo_t *si)
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 @@ static vki_siginfo_t *next_queued(ThreadId tid, const vki_sigset_t *set)
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 @@ static int sanitize_si_code(int si_code)
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 @@ void async_signalhandler ( Int sigNo,
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 @@ void async_signalhandler ( Int sigNo,
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 @@ Bool VG_(extend_stack)(ThreadId tid, Addr addr)
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 @@ Bool VG_(extend_stack)(ThreadId tid, Addr addr)
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 @@ void sync_signalhandler_from_user ( ThreadId tid,
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 @@ static Bool extend_stack_if_appropriate(ThreadId tid, vki_siginfo_t* info)
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 @@ void sync_signalhandler_from_kernel ( ThreadId tid,
"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 @@ void sync_signalhandler ( Int sigNo,
} 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 @@ static void sigvgkill_handler(int signo, vki_siginfo_t *si,
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 @@ void pp_ksigaction ( vki_sigaction_toK_t* sa )
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 @@ void VG_(set_default_handler)(Int signo)
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 @@ void VG_(poll_signals)(ThreadId tid)
/* 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 @@ void VG_(poll_signals)(ThreadId tid)
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 @@ void VG_(sigstartup_actions) ( void )
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 @@ void VG_(sigstartup_actions) ( void )
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 3f111c411..a8a845d52 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 3a2e3d00f..aac5ebf7f 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 UWord next_id; /* Next id we hand out to a newly registered stack */
*/
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 @@ static void complaints_stack_switch (Addr old_SP, Addr new_SP)
(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 b2d188629..8c1e9a4b2 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 @@ static Addr fp_CF_verif_cache [N_FP_CF_VERIF];
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
/* 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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
}
# 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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
/* 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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
}
/* 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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
/* ----------------------- 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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
/* 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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
# 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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
}
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
ips[i++] = uregs.pc;
- if (UNLIKELY(cmrf > 0)) { RECURSIVE_MERGE(cmrf,ips,i); };
+ RECURSIVE_MERGE(cmrf,ips,i);
}
continue;
}
@@ -1574,7 +1621,7 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
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 @@ UInt VG_(get_StackTrace) ( ThreadId tid,
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 f152b72c8..308fcfef7 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 @@ SysRes VG_(mk_SysRes_arm64_linux) ( Long val ) {
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_Error) ( UWord err ) {
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 @@ SysRes VG_(mk_SysRes_Success) ( UWord res ) {
}
+#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 @@ asm(
".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 @@ SysRes VG_(do_syscall) ( UWord sysno, UWord a1, UWord a2, UWord a3,
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 b68af4208..62784e9a9 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 @@ DECL_TEMPLATE(darwin, sem_post); // 273
#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, chmod_extended); // 282
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 @@ DECL_TEMPLATE(darwin, gettid); // 286
// 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_markcancel); // 332
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 @@ DECL_TEMPLATE(darwin, auditon); // 351
// 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, workq_ops); // 368
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 @@ DECL_TEMPLATE(darwin, fileport_makeport); // 430
// 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 @@ DECL_TEMPLATE(darwin, disconnectx); // 448
// 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_pwrite_np); // 486
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_page_size);
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_get_attributes);
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, task_policy_set);
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 f014914b3..029260f5d 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 @@ Bool ML_(valid_client_addr)(Addr start, SizeT size, ThreadId tid,
/* 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 @@ extern
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 @@ void ML_(PRE_unknown_ioctl)(ThreadId tid, UWord request, UWord arg);
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 07b745f46..66cdaa6d2 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 6552dca82..03fcd118a 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 4105f9666..cabad7ccc 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 000000000..3c30e49bb
--- /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 ae6bf6042..696dda54e 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 26a82f7ab..0eacfc758 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 @@ typedef
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 @@ typedef
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 @@ SyscallTableEntry* ML_(get_linux_syscall_entry)( UInt sysno );
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 @@ extern const UInt ML_(syscall_table_size);
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 @@ extern const UInt ML_(syscall_table_size);
#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 @@ static inline UWord getRES ( SyscallStatus* st ) {
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 @@ static inline UWord getERR ( SyscallStatus* st ) {
# 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 @@ static inline UWord getERR ( SyscallStatus* st ) {
# 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 c5937302c..6f1652b6a 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 @@ ML_(blksys_finished_UNIX): .quad MK_L_SCCLASS_N(UNIX,5)
#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 a6d74690e..80cc75cfc 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_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_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 000000000..e04503e11
--- /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 383929982..9e020f946 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_complete): .long 3b
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 8b0e4b39c..2306ade58 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_complete): .quad 3b
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 4a764a281..85459763b 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_restart): .long 2b
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
-#endif // defined(VGP_mips32_linux)
-
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/
diff --git a/coregrind/m_syswrap/syscall-mips64-linux.S b/coregrind/m_syswrap/syscall-mips64-linux.S
index 330ab1d17..660087850 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_restart): .quad 2b
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 9cd2aaa90..6213922c7 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_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_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 a301612e4..9c42f3ebe 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_complete): .quad 3b
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 4ea1f8fce..b469cc401 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_complete): .quad 3b
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 6b21eac62..b8a93813d 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_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 /* 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 0bd3756ab..7be2f6a9a 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_(do_syscall_for_client_WRK):
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 288520d09..823c9b47e 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_committed_UNIX): .long MK_L_SCCLASS_N(UNIX,4)
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 d32d537bd..e4c6a0a5d 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_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_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 000000000..c0df3d8ed
--- /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 979fe3636..8f13e71f8 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 @@ void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem,
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 @@ void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem,
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 @@ void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem,
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 @@ void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem,
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 de3288e52..7c88bc225 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 @@ static void setup_child ( ThreadArchState*, ThreadArchState* );
/*
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_rt_sigreturn)
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 @@ PRE(sys_arch_prctl)
// 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 @@ POST(sys_ptrace)
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 @@ PRE(sys_mmap)
{
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 000000000..4fd78ec36
--- /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 f8f56f5ff..3ccad12c2 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 @@ 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
@@ -352,8 +352,8 @@ PRE(sys_mmap2)
// 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 @@ PRE(sys_mmap2)
// 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 @@ POST(sys_lstat64)
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 @@ POST(sys_stat64)
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 @@ POST(sys_fstatat64)
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 @@ PRE(sys_sigsuspend)
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 @@ PRE(sys_cacheflush)
// 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 @@ static SyscallTableEntry syscall_main_table[] = {
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 7551e8ae0..8d3027de6 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 @@ static void assign_guest_tls(ThreadId ctid, 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
@@ -431,7 +431,7 @@ DECL_TEMPLATE(arm64_linux, sys_rt_sigreturn);
// 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 @@ PRE(sys_mmap)
{
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 @@ PRE(sys_rt_sigreturn)
// (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 @@ static SyscallTableEntry syscall_main_table[] = {
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 @@ static SyscallTableEntry syscall_main_table[] = {
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 @@ static SyscallTableEntry syscall_main_table[] = {
//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 @@ static SyscallTableEntry syscall_main_table[] = {
//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 0bb276e66..206d57f2c 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 @@ static VgSchedReturnCode thread_wrapper(Word /*ThreadId*/ tidW)
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 @@ static VgSchedReturnCode thread_wrapper(Word /*ThreadId*/ tidW)
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 @@ static VgSchedReturnCode thread_wrapper(Word /*ThreadId*/ tidW)
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 @@ Addr allocstack ( ThreadId tid )
}
}
- 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 @@ static void run_a_thread_NORETURN ( Word tidW )
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 @@ static void run_a_thread_NORETURN ( Word tidW )
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 @@ static void run_a_thread_NORETURN ( Word tidW )
);
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 @@ static void run_a_thread_NORETURN ( Word tidW )
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 @@ static void run_a_thread_NORETURN ( Word tidW )
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 @@ Bool ML_(sync_mappings)(const HChar* when, const HChar* where, UWord num)
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 @@ PRE(ioctl)
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 @@ PRE(ioctl)
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 @@ POST(ioctl)
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 @@ static const HChar *name_for_fcntl(UWord cmd) {
# 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 @@ PRE(fcntl)
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 @@ PRE(fcntl)
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 @@ PRE(fcntl)
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 @@ PRE(fcntl)
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 @@ PRE(fcntl)
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 @@ PRE(fcntl)
// 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 @@ PRE(fcntl)
// 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 @@ PRE(fcntl)
// 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 @@ PRE(fcntl)
// 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 @@ PRE(fcntl)
// 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 @@ PRE(fcntl)
// 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 @@ PRE(fcntl)
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 @@ PRE(fcntl)
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 @@ PRE(fcntl)
}
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 @@ POST(fcntl)
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(futimes)
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 @@ PRE(semctl)
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 @@ PRE(sem_open)
{
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_close)
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_destroy)
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(disconnectx)
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 @@ POST(kevent)
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 @@ static const HChar *workqop_name(int op)
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 @@ POST(workq_ops)
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 @@ PRE(exit)
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(exit)
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 @@ POST(sigaction)
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 @@ PRE(__pthread_canceled)
*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(__pthread_markcancel)
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(__disable_threadsignal)
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_chdir)
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(__pthread_fchdir)
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(kdebug_trace)
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(modwatch)
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 @@ POST(getxattr)
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 @@ POST(fgetxattr)
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(setxattr)
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(fsetxattr)
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(removexattr)
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(fremovexattr)
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 @@ POST(listxattr)
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 @@ POST(flistxattr)
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 @@ POST(shmat)
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 @@ POST(shmdt)
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 @@ POST(shm_open)
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 @@ POST(shm_unlink)
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 @@ POST(stat_extended)
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 @@ POST(lstat_extended)
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 @@ POST(fstat_extended)
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 @@ POST(stat64_extended)
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 @@ POST(lstat64_extended)
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 @@ PRE(fchmod_extended)
{
/* 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 @@ PRE(open_extended)
{
/* 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(open_extended)
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 @@ POST(access_extended)
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(chflags)
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(fchflags)
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 @@ POST(stat64)
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 @@ POST(lstat64)
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 @@ POST(fstat64)
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 @@ POST(getfsstat)
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 @@ PRE(mount)
// 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 @@ static void set1attr(ThreadId tid, void *attrData, SizeT attrDataSize)
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 @@ POST(getattrlist)
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(setattrlist)
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 @@ POST(getdirentriesattr)
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(exchangedata)
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 @@ POST(fsctl)
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 @@ PRE(posix_spawn)
} 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 @@ POST(posix_spawn)
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 @@ POST(socket)
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 @@ PRE(getsockopt)
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 @@ POST(getsockopt)
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(connect)
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 @@ POST(accept)
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 @@ PRE(sendto)
{
*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 @@ PRE(sendfile)
{
#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(sendfile)
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 @@ PRE(recvfrom)
{
*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 @@ POST(recvfrom)
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(sendmsg)
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 @@ POST(recvmsg)
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(bind)
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 @@ POST(getsockname)
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 @@ POST(getpeername)
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 @@ POST(pipe)
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 @@ POST(getlogin)
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 @@ POST(getdtablesize)
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(lseek)
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(pathconf)
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(fpathconf)
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 @@ POST(getdirentries)
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 @@ POST(getdirentries64)
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 @@ POST(statfs64)
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 @@ POST(fstatfs64)
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 @@ POST(csops)
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 @@ POST(auditon)
}
}
+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 @@ PRE(mmap)
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 @@ PRE(mmap)
// (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 @@ PRE(__sysctl)
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 @@ POST(sigpending)
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 @@ PRE(sigsuspend)
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 @@ POST(proc_info)
#endif
}
-#endif /* DARWIN_VERS >= DARWIN_10_6 */
/* ---------------------------------------------------------------------
aio_*
@@ -4841,7 +4943,7 @@ POST(host_page_size)
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_request_notification)
}
+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 @@ POST(task_get_special_port)
}
+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 @@ POST(task_info)
}
+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 @@ PRE(vm_allocate)
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 @@ PRE(vm_deallocate)
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 @@ PRE(vm_protect)
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 @@ PRE(vm_inherit)
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 @@ PRE(vm_map)
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 @@ PRE(vm_remap)
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 @@ PRE(mach_vm_purgable_control)
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 @@ PRE(mach_vm_allocate)
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 @@ PRE(mach_vm_deallocate)
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 @@ PRE(mach_vm_protect)
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 @@ PRE(thread_terminate)
// 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 @@ PRE(mach_msg_host)
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 @@ PRE(mach_msg_task)
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 @@ PRE(mach_msg)
// 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 @@ POST(mach_task_self)
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 @@ PRE(__semwait_signal)
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 @@ PRE(__semwait_signal)
// 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)
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 @@ PRE(thread_fast_set_cthread_self)
/* ---------------------------------------------------------------------
- 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 @@ POST(psynch_rw_unlock)
{
}
+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 @@ PRE(necp_match_policy)
{
// 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 @@ PRE(sysctlbyname)
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 @@ PRE(getattrlistbulk)
// 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 @@ PRE(readlinkat)
{
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 @@ PRE(guarded_open_dprotected_np)
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 @@ const SyscallTableEntry ML_(syscall_table)[] = {
// _____(__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 @@ const SyscallTableEntry ML_(syscall_table)[] = {
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 @@ const SyscallTableEntry ML_(syscall_table)[] = {
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 @@ const SyscallTableEntry ML_(syscall_table)[] = {
// _____(__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 @@ const SyscallTableEntry ML_(syscall_table)[] = {
#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 @@ const SyscallTableEntry ML_(syscall_table)[] = {
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 @@ const SyscallTableEntry ML_(mach_trap_table)[] = {
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
+
+# 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
- _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(43)),
-#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 fcf5687b2..aa60d6752 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 @@ void ML_(guess_and_register_stack) (Addr sp, ThreadState* tst)
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 @@ Bool ML_(client_signal_OK)(Int sigNo)
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 @@ SysRes do_mremap( Addr old_addr, SizeT old_len,
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 @@ static Int fd_count = 0;
/* 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 @@ void ML_(record_fd_open_nameless)(ThreadId tid, Int fd)
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 @@ void VG_(init_preopened_fds)(void)
#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 @@ void pre_mem_read_sockaddr ( ThreadId tid,
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 @@ void pre_mem_read_sockaddr ( ThreadId tid,
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 @@ static Addr do_brk ( Addr newbrk, ThreadId tid )
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 @@ UInt get_sem_count( Int semid )
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 @@ ML_(generic_PRE_sys_semctl) ( ThreadId tid,
#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 @@ ML_(generic_PRE_sys_semctl) ( ThreadId tid,
#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 @@ ML_(generic_POST_sys_semctl) ( ThreadId tid,
#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 @@ ML_(generic_POST_sys_semctl) ( ThreadId tid,
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 @@ SizeT get_shm_size ( Int shmid )
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 @@ ML_(generic_PRE_sys_mmap) ( ThreadId tid,
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 @@ ML_(generic_PRE_sys_mmap) ( ThreadId tid,
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 @@ ML_(generic_PRE_sys_mmap) ( ThreadId tid,
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 @@ ML_(generic_PRE_sys_mmap) ( ThreadId tid,
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 @@ ML_(generic_PRE_sys_mmap) ( ThreadId tid,
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 @@ PRE(sys_exit)
{
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_ni_syscall)
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 @@ PRE(sys_getpmsg)
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 @@ PRE(sys_putpmsg)
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_putpmsg)
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 @@ POST(sys_getitimer)
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_chroot)
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 @@ PRE(sys_mremap)
// 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_mremap)
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_mlockall)
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 @@ PRE(sys_pwrite64)
{
*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_sync)
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 @@ POST(sys_fstatfs)
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 @@ POST(sys_fstatfs64)
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 @@ PRE(sys_pread64)
{
*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 @@ POST(sys_pread64)
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_mknod)
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 @@ PRE(sys_execve)
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 @@ PRE(sys_execve)
} 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 @@ PRE(sys_execve)
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_execve)
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_chdir)
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_lchown)
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 @@ PRE(sys_close)
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 @@ POST(sys_dup)
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 @@ POST(sys_dup2)
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_fchown)
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(sys_newfstat)
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 @@ PRE(sys_fork)
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 @@ PRE(sys_fork)
# error Unknown OS
#endif
- VG_(do_atfork_pre)(tid);
-
if (is_child) {
VG_(do_atfork_child)(tid);
@@ -3206,18 +3330,19 @@ PRE(sys_fork)
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 @@ PRE(sys_ftruncate64)
{
*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_truncate64)
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 @@ POST(sys_getdents)
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 @@ POST(sys_getdents64)
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_getpid)
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 @@ static void common_post_getrlimit(ThreadId tid, UWord a1, UWord a2)
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 @@ POST(sys_old_getrlimit)
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 @@ POST(sys_getrlimit)
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 @@ void ML_(PRE_unknown_ioctl)(ThreadId tid, UWord request, UWord arg)
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 @@ Bool ML_(do_sigkill)(Int pid, Int tgid)
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 @@ Bool ML_(do_sigkill)(Int pid, Int tgid)
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 @@ PRE(sys_kill)
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 @@ POST(sys_newlstat)
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(sys_nanosleep)
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 @@ PRE(sys_open)
}
}
- /* 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 @@ POST(sys_open)
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 @@ PRE(sys_write)
{
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 @@ PRE(sys_write)
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_write)
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 @@ PRE(sys_poll)
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 @@ PRE(sys_readlink)
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 @@ PRE(sys_readv)
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_rmdir)
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_select)
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_setgroups)
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_setreuid)
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 @@ PRE(sys_setrlimit)
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_setrlimit)
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 @@ POST(sys_times)
PRE(sys_umask)
{
- PRINT("sys_umask ( %ld )", ARG1);
+ PRINT("sys_umask ( %ld )", SARG1);
PRE_REG_READ1(long, "umask", int, mask);
}
@@ -4293,7 +4474,7 @@ POST(sys_newuname)
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 @@ POST(sys_waitpid)
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 @@ PRE(sys_writev)
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(sys_sigaltstack)
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 @@ POST(sys_sigaltstack)
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 @@ PRE(sys_sethostname)
#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 fe780282e..cd27091bd 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 935d190a2..f79696989 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 @@ static VgSchedReturnCode thread_wrapper(Word /*ThreadId*/ tidW)
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 @@ static VgSchedReturnCode thread_wrapper(Word /*ThreadId*/ tidW)
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 @@ static VgSchedReturnCode thread_wrapper(Word /*ThreadId*/ tidW)
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 @@ static void run_a_thread_NORETURN ( Word tidW )
#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 @@ static void run_a_thread_NORETURN ( Word tidW )
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 @@ static void run_a_thread_NORETURN ( Word tidW )
);
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 @@ static void run_a_thread_NORETURN ( Word tidW )
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 @@ static void run_a_thread_NORETURN ( Word tidW )
} 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 @@ Addr ML_(allocstack)(ThreadId tid)
}
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 @@ SysRes ML_(do_fork_clone) ( ThreadId tid, UInt flags,
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_oldumount)
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_pivot_root)
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 @@ POST(sys_getresuid)
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_setresgid16)
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 @@ PRE(sys_exit_group)
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_exit_group)
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 @@ POST(sys_adjtimex)
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 @@ POST(sys_clock_adjtime)
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_ioperm)
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 @@ POST(sys_sysctl)
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 @@ POST(sys_prctl)
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 @@ POST(sys_sendfile)
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 @@ PRE(sys_futex)
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 @@ POST(sys_futex)
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_set_robust_list)
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 @@ POST(sys_get_robust_list)
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 @@ PRE(sys_ppoll)
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 @@ POST(sys_ppoll)
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 @@ POST(sys_epoll_create)
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 @@ PRE(sys_epoll_ctl)
"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_ctl)
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 @@ POST(sys_epoll_wait)
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 @@ POST(sys_eventfd)
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 @@ PRE(sys_fallocate)
*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_fallocate)
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_set_tid_address)
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 @@ PRE(sys_tkill)
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 @@ POST(sys_tkill)
{
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 @@ PRE(sys_tgkill)
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 @@ POST(sys_tgkill)
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 @@ POST(sys_tgkill)
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)
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 @@ PRE(sys_io_submit)
{
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 @@ POST(sys_io_cancel)
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_mbind)
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_set_mempolicy)
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 @@ PRE(sys_fanotify_mark)
{
#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 @@ PRE(sys_fanotify_mark)
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 @@ POST(sys_inotify_init)
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 @@ POST(sys_inotify_init1)
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_inotify_rm_watch)
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_unlink)
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_timedsend)
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 @@ POST(sys_mq_timedreceive)
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_notify)
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 @@ POST(sys_mq_getsetattr)
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_settime)
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 @@ POST(sys_clock_gettime)
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 @@ POST(sys_clock_getres)
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 @@ POST(sys_clock_nanosleep)
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 @@ POST(sys_timer_create)
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 @@ POST(sys_timer_settime)
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 @@ PRE(sys_timerfd_create)
{
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 @@ PRE(sys_timerfd_create)
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 @@ POST(sys_timerfd_create)
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 @@ POST(sys_timerfd_gettime)
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_getuid16)
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_getgid16)
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_setreuid16)
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_chown16)
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_fchown16)
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_setxattr)
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_lsetxattr)
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 @@ POST(sys_lgetxattr)
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 @@ POST(sys_llistxattr)
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_lremovexattr)
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_fremovexattr)
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 @@ POST(sys_sched_setparam)
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 @@ POST(sys_sched_getparam)
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_yield)
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 @@ POST(sys_sched_rr_get_interval)
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_setaffinity)
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 @@ POST(sys_sched_getaffinity)
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 @@ POST(sys_pipe2)
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_quotactl)
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 @@ PRE(sys_sync_file_range)
{
*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 @@ PRE(sys_sync_file_range2)
{
*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_stime)
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 @@ POST(sys_getcpu)
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 @@ POST(sys_move_pages)
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 @@ POST(sys_getrandom)
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 @@ POST(sys_memfd_create)
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_utime)
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 @@ PRE(sys_readahead)
{
*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 @@ PRE(sys_sigprocmask)
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 @@ PRE(sys_sigaction)
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 @@ POST(sys_signalfd)
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 @@ POST(sys_signalfd4)
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 @@ POST(sys_rt_sigaction)
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 @@ POST(sys_rt_sigpending)
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 @@ POST(sys_rt_sigtimedwait)
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 @@ POST(sys_rt_sigqueueinfo)
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 @@ PRE(sys_rt_sigsuspend)
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 @@ static Bool semctl_cmd_has_4args (UWord cmd)
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 @@ PRE(sys_ipc)
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 @@ POST(sys_ipc)
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 @@ POST(sys_ipc)
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 @@ PRE(sys_semctl)
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 @@ POST(sys_semctl)
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_semtimedop)
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_msgsnd)
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 @@ POST(sys_msgrcv)
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 @@ POST(sys_msgctl)
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(sys_shmget)
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 @@ POST(sys_shmdt)
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 @@ PRE(sys_socketcall)
}
*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 @@ POST(sys_socketcall)
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 @@ POST(sys_socket)
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 @@ POST(sys_getsockopt)
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_connect)
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 @@ POST(sys_accept)
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 @@ POST(sys_accept4)
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_send)
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_sendto)
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 @@ POST (sys_recv)
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 @@ POST(sys_recvfrom)
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 @@ POST(sys_recvmsg)
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_bind)
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 @@ POST(sys_getsockname)
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 @@ POST(sys_getpeername)
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 @@ PRE(sys_openat)
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 @@ POST(sys_openat)
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_mkdirat)
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_mknodat)
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_fchownat)
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_futimesat)
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_utimensat)
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 @@ POST(sys_newfstatat)
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_renameat)
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_linkat)
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 @@ PRE(sys_readlinkat)
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_readlinkat)
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_fchmodat)
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_faccessat)
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 @@ POST(sys_name_to_handle_at)
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 @@ PRE(sys_preadv)
#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 @@ PRE(sys_pwritev)
#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_pwritev)
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 @@ POST(sys_process_vm_readv)
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_process_vm_writev)
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 @@ POST(sys_sendmmsg)
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 @@ POST(sys_recvmmsg)
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_request_key)
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 @@ PRE(sys_keyctl)
{
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(sys_keyctl)
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(sys_keyctl)
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(sys_keyctl)
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(sys_keyctl)
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(sys_keyctl)
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(sys_keyctl)
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 @@ POST(sys_keyctl)
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_ioprio_get)
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_init_module)
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_delete_module)
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_splice)
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 @@ PRE(sys_vmsplice)
{
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 @@ POST(sys_vmsplice)
#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 @@ POST(sys_lookup_dcookie)
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 @@ PRE(sys_fcntl)
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 @@ PRE(sys_fcntl)
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 @@ PRE(sys_fcntl)
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 @@ PRE(sys_fcntl)
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 @@ PRE(sys_fcntl)
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 @@ PRE(sys_fcntl64)
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 @@ PRE(sys_fcntl64)
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 @@ PRE(sys_fcntl64)
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 @@ PRE(sys_fcntl64)
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 @@ PRE(sys_ioctl)
/* 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(sys_ioctl)
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(sys_ioctl)
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(sys_ioctl)
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(sys_ioctl)
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(sys_ioctl)
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 @@ PRE(sys_ioctl)
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 @@ PRE(sys_ioctl)
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 @@ PRE(sys_ioctl)
}
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(sys_ioctl)
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(sys_ioctl)
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(sys_ioctl)
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 @@ PRE(sys_ioctl)
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 @@ POST(sys_ioctl)
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 @@ POST(sys_ioctl)
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 @@ POST(sys_ioctl)
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 @@ POST(sys_ioctl)
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 @@ POST(sys_ioctl)
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 @@ POST(sys_ioctl)
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 @@ POST(sys_ioctl)
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(sys_ioctl)
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 @@ POST(sys_ioctl)
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 @@ ML_(linux_POST_getregset) ( ThreadId tid, long arg3, long arg4 )
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 4d6d9ba76..f4d1fdd47 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 @@ UWord ML_(do_syscall_for_client_mdep_WRK)( Word syscallno,
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 @@ void do_syscall_for_client ( Int syscallno,
/*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 @@ Bool eq_SyscallArgs ( SyscallArgs* a1, SyscallArgs* a2 )
}
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 @@ void getSyscallArgsFromGuestState ( /*OUT*/SyscallArgs* canonical,
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 @@ void putSyscallArgsIntoGuestState ( /*IN*/ SyscallArgs* canonical,
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 @@ void getSyscallStatusFromGuestState ( /*OUT*/SyscallStatus* canonical,
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 @@ void putSyscallStatusIntoGuestState ( /*IN*/ ThreadId tid,
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 @@ void getSyscallArgLayout ( /*OUT*/SyscallArgLayout* layout )
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 @@ void getSyscallArgLayout ( /*OUT*/SyscallArgLayout* layout )
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 @@ void bad_before ( ThreadId tid,
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 @@ static const SyscallTableEntry* get_syscall_entry ( Int syscallno )
break;
}
+# elif defined(VGO_solaris)
+ sys = ML_(get_solaris_syscall_entry)(syscallno);
+
# else
# error Unknown OS
# endif
@@ -1626,7 +1882,7 @@ void VG_(client_syscall) ( ThreadId tid, UInt trc )
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 @@ void VG_(client_syscall) ( ThreadId tid, UInt trc )
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 @@ void VG_(client_syscall) ( ThreadId tid, UInt trc )
/* 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 @@ void VG_(post_syscall) (ThreadId tid)
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 @@ void VG_(post_syscall) (ThreadId tid)
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 @@ void VG_(post_syscall) (ThreadId tid)
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 @@ void ML_(fixup_guest_state_to_restart_syscall) ( ThreadArchState* arch )
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 @@ void ML_(fixup_guest_state_to_restart_syscall) ( ThreadArchState* arch )
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 @@ void ML_(fixup_guest_state_to_restart_syscall) ( ThreadArchState* arch )
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 @@ void ML_(fixup_guest_state_to_restart_syscall) ( ThreadArchState* arch )
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 @@ void ML_(fixup_guest_state_to_restart_syscall) ( ThreadArchState* arch )
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 @@ void ML_(fixup_guest_state_to_restart_syscall) ( ThreadArchState* arch )
/* 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 @@ void ML_(fixup_guest_state_to_restart_syscall) ( ThreadArchState* arch )
}
#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 @@ void ML_(fixup_guest_state_to_restart_syscall) ( ThreadArchState* arch )
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 @@ void
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 @@ VG_(fixup_guest_state_after_syscall_interrupted)( ThreadId tid,
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 @@ VG_(fixup_guest_state_after_syscall_interrupted)( ThreadId tid,
|| (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 @@ VG_(fixup_guest_state_after_syscall_interrupted)( ThreadId tid,
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_(fixup_guest_state_after_syscall_interrupted)( ThreadId tid,
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 @@ VG_(fixup_guest_state_after_syscall_interrupted)( ThreadId tid,
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 @@ VG_(fixup_guest_state_after_syscall_interrupted)( ThreadId tid,
}
+#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 @@ void ML_(wqthread_continue_NORETURN)(ThreadId tid)
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 7a715766c..7a4a857e2 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 @@ static SysRes mips_PRE_sys_mmap (ThreadId tid,
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 @@ PRE(sys_mmap2)
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_mmap2)
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_mmap)
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 @@ POST (sys_lstat64)
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 @@ POST (sys_stat64)
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 @@ POST (sys_fstatat64)
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 @@ PRE (sys_set_thread_area)
/* 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 3a5e97960..12d147dfd 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 void setup_child ( ThreadArchState *, ThreadArchState *);
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 @@ DECL_TEMPLATE (mips_linux, sys_pipe);
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_splice)
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_swapoff)
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 @@ PRE(sys_cacheflush)
{
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_cacheflush)
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 @@ POST(sys_ptrace)
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 9c9937bdd..9ceaa1514 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 @@ static void setup_child ( ThreadArchState*, ThreadArchState* );
/*
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 @@ PRE(sys_mmap)
{
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 @@ PRE(sys_mmap2)
// 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 @@ POST(sys_stat64)
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 @@ POST(sys_lstat64)
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 @@ POST(sys_fstatat64)
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 @@ PRE(sys_sigsuspend)
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 e2432fd7c..15b8979eb 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 @@ static void setup_child ( ThreadArchState*, ThreadArchState* );
/*
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 @@ PRE(sys_mmap)
{
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_clone)
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 db374f4a1..e919b8f31 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 @@ static void setup_child ( /*OUT*/ ThreadArchState *child,
/*
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 @@ DECL_TEMPLATE(s390x_linux, sys_fadvise64);
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 @@ PRE(sys_mmap)
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 @@ PRE(sys_rt_sigreturn)
/* 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 000000000..216e53c69
--- /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 fbdf4bfd4..aceceb465 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 void setup_child ( ThreadArchState *, ThreadArchState * );
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 @@ static SysRes do_clone ( ThreadId ptid,
/* 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_rt_sigreturn)
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 @@ PRE(sys_arch_prctl)
// 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 @@ POST(sys_ptrace)
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 @@ POST(sys_socket)
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_setsockopt)
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 @@ POST(sys_getsockopt)
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_connect)
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 @@ POST(sys_accept)
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 @@ POST(sys_accept4)
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_sendto)
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 @@ POST(sys_recvfrom)
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_sendmsg)
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 @@ POST(sys_recvmsg)
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_bind)
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 @@ POST(sys_getsockname)
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 @@ POST(sys_getpeername)
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 @@ POST(sys_socketpair)
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_semop)
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 @@ PRE(sys_semctl)
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 @@ POST(sys_semctl)
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_msgsnd)
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 @@ POST(sys_msgrcv)
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 @@ POST(sys_msgctl)
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 @@ POST(sys_shmdt)
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 @@ POST(sys_shmctl)
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 @@ PRE(sys_mmap)
{
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_mmap)
------------------------------------------------------------ */
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_cacheflush)
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 45f0adf5b..a9282ee1f 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 @@ void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem,
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 @@ void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem,
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 @@ void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem,
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 e08af76ff..24d7dc18a 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 @@ static SysRes sys_set_thread_area ( ThreadId, vki_modify_ldt_t* );
/*
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 @@ static SysRes do_clone ( ThreadId ptid,
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 @@ void translate_to_hw_format ( /* IN */ vki_modify_ldt_t* inn,
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 @@ SysRes read_ldt ( ThreadId tid, UChar* ptr, UInt bytecount )
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 @@ SysRes write_ldt ( ThreadId tid, void* ptr, UInt bytecount, Int oldmode )
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 @@ PRE(old_select)
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_rt_sigreturn)
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 @@ PRE(sys_get_thread_area)
// 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 @@ PRE(old_mmap)
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 @@ PRE(sys_mmap2)
// 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 @@ PRE(sys_mmap2)
// 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 @@ POST(sys_lstat64)
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 @@ POST(sys_stat64)
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 @@ POST(sys_fstatat64)
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 @@ PRE(sys_sigsuspend)
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 @@ POST(sys_vm86old)
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 000000000..ed577294a
--- /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 a1e11c929..20341c4a6 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 @@ static void bad_subop ( ThreadId tid,
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 @@ PRE(memory_op)
(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 @@ PRE(memory_op)
(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(memory_op)
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(mmuext_op)
}
}
+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 @@ static void pre_evtchn_op(ThreadId tid,
/*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 @@ PRE(evtchn_op_compat)
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(xen_version)
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(grant_table_op)
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 @@ PRE(sysctl) {
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(sysctl) {
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 @@ PRE(domctl)
{
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 @@ PRE(domctl)
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(domctl)
__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(domctl)
__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 @@ PRE(domctl)
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 @@ PRE(domctl)
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(domctl)
__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 @@ PRE(domctl)
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 @@ PRE(domctl)
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(domctl)
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(domctl)
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 @@ PRE(hvm_op)
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(hvm_op)
__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 @@ PRE(tmem_op)
{
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 @@ PRE(tmem_op)
* 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 @@ POST(memory_op)
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 @@ POST(memory_op)
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(mmuext_op)
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 @@ static void post_evtchn_op(ThreadId tid, __vki_u32 cmd, void *arg, int compat)
}
}
+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_compat)
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 @@ POST(sysctl)
case 0x00000008:
case 0x00000009:
case 0x0000000a:
+ case 0x0000000b:
break;
default:
return;
@@ -1138,6 +1567,7 @@ POST(sysctl)
* 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(sysctl)
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 @@ POST(domctl){
case 0x00000007:
case 0x00000008:
case 0x00000009:
+ case 0x0000000a:
break;
default:
return;
@@ -1253,12 +1685,19 @@ POST(domctl){
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 @@ POST(domctl){
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 @@ POST(domctl){
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(domctl){
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 @@ POST(domctl){
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 @@ POST(domctl){
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 @@ POST(hvm_op)
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 @@ static XenHypercallTableEntry hypercall_table[] = {
// __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 e6b7b7ba9..6cea270bd 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 @@ UInt VG_N_THREADS;
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 40d832504..6971a47cc 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_post_mem_write, CorePart, ThreadId, Addr, SizeT)
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 027f9f6a6..cac228899 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 @@ VG_(trampoline_stuff_end):
# undef UD2_1024
# undef UD2_PAGE
+/*---------------------- tilegx-linux ----------------------*/
#else
#if defined(VGP_tilegx_linux)
@@ -1399,6 +1400,186 @@ VG_(trampoline_stuff_end):
# 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 @@ VG_(trampoline_stuff_end):
#endif
#endif
#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
+MARK_STACK_NO_EXEC
/*--------------------------------------------------------------------*/
/*--- end ---*/
diff --git a/coregrind/m_translate.c b/coregrind/m_translate.c
index 86a3f4a0d..62680cb9b 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 VG_(translate) ( ThreadId tid,
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 @@ Bool VG_(translate) ( ThreadId tid,
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 a5f6f26fa..b9cce9920 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 @@ void VG_(init_tt_tc) ( void )
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 @@ void VG_(print_tt_tc_stats) ( void )
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 0e4c1cd9e..a9871501f 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 VG_(load_ELF)(Int fd, const HChar* name, /*MOD*/ExeInfo* info)
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 @@ Int VG_(load_ELF)(Int fd, const HChar* name, /*MOD*/ExeInfo* info)
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 @@ Int VG_(load_ELF)(Int fd, const HChar* name, /*MOD*/ExeInfo* info)
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 @@ Int VG_(load_ELF)(Int fd, const HChar* name, /*MOD*/ExeInfo* info)
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 @@ Int VG_(load_ELF)(Int fd, const HChar* name, /*MOD*/ExeInfo* info)
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 @@ Int VG_(load_ELF)(Int fd, const HChar* name, /*MOD*/ExeInfo* info)
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 @@ Int VG_(load_ELF)(Int fd, const HChar* name, /*MOD*/ExeInfo* info)
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 @@ Int VG_(load_ELF)(Int fd, const HChar* name, /*MOD*/ExeInfo* info)
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 5c5514190..efe0f59fe 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 print(const HChar *str)
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(SysRes res, Addr base, SizeT len, const HChar* who)
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 11c6cc675..a319f4acc 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 @@ typedef struct {
} 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 4f7819051..7b3ccfd50 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 @@ extern Int VG_(load_script) ( Int fd, const HChar *name, ExeInfo *info );
#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 5c03428da..7f6b5b652 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 @@ Int VG_(load_script)(Int fd, const HChar* name, ExeInfo* info)
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 2e1626bc1..11b115c72 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 @@ void VG_(vki_do_initial_consistency_checks) ( void )
/* --- 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 @@ void VG_(vki_do_initial_consistency_checks) ( void )
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 6bd15b2f0..9807a8240 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 @@ const HChar* VG_(sysnum_string)(Word sysnum)
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 @@ const HChar* VG_(sysnum_string)(Word sysnum)
}
//---------------------------------------------------------------------------
+#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 30cd6ad6f..9717020c2 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 726dd5547..07f161fee 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 @@ Bool VG_(lookupXA) ( const XArray* xa, const void* key,
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 577c10421..d5ee2dba1 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 7ff0d98c7..66bca0cda 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 aefb43e41..003d94e44 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 @@ extern Bool VG_(am_is_valid_for_aspacem_minAddr)( Addr addr,
// 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_valgrind)
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 @@ extern Bool VG_(am_do_sync_check) ( const HChar* fn,
/* 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 @@ extern SysRes VG_(am_do_mmap_NO_NOTIFY)
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 9d7e6b451..278e3dc00 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 ada20cb1d..0dccce8e3 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 dc93d1fd7..215dfb20e 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 @@ extern Int VG_(cl_cmdline_fd);
/* 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 @@ extern Addr VG_(client___libc_freeres_wrapper);
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 @@ extern Addr VG_(client__dl_sysinfo_int80);
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 b6d3a096c..45c48c31a 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 0cf003631..bac902e15 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 08e41079c..851b3ff3f 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 eebe3713e..f34e56efd 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_debuginfo.h b/coregrind/pub_core_debuginfo.h
index ce1b199fd..b698f2c9d 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 @@ extern void VG_(di_initialise) ( void );
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 @@ extern Bool VG_(use_CF_info) ( /*MOD*/D3UnwindRegs* uregs,
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 @@ extern Bool VG_(use_FPO_info) ( /*MOD*/Addr* ipP,
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 812ce8ab3..c5006caf1 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 0803485fa..956fe17be 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 b7e1a8fec..57b2f7b0a 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 9e08e9d46..222879b10 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 97fa50087..297efa31a 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 110c206a6..5dc01b702 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 @@ extern void VG_(load_suppressions) ( void );
// 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 abab88895..b553cc03d 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 6ec9dafc6..fa6986366 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 @@ extern Bool VG_(gdbserver_activity) (ThreadId tid);
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 @@ void VG_(set_ptracer)(void);
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 46a7d059c..d7025c64e 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 ca6ba57fb..e5eb46f97 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 428b0c204..2943321b6 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 @@ struct _IIFinaliseImageInfo {
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 9ee26227a..0e59844e4 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 32cfc5046..931335008 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 @@ extern void VG_(exit_now)( Int status );
/* 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 e0b5bbfc6..cdb4c49b5 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 560e10ce5..caf7ce18a 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 aedd915bb..7b2d4a813 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 a1f1e9afb..1bb27baab 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 1f71acf29..105c304bf 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 46fa22ca6..8f45a4680 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 @@ extern Bool VG_(iseqsigset) ( const vki_sigset_t* set1,
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 038747c2d..3dd882c4f 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 7fb7afeb5..a72381b03 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 eeb4aa110..87fe7d95a 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 @@ typedef Int ArenaId;
// 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 @@ typedef Int ArenaId;
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 53ccfc0cc..2a45c6b39 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 @@ extern const HChar *VG_(clo_vgdb_prefix);
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 @@ extern Int VG_(clo_dump_error);
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 51a6921dc..67a1e9108 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 c8127e6a7..7744e8cd5 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 d181e1fca..39d24a4e5 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 3f2541b3d..5d4042995 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 bbcbf8d7f..4cb3e6f22 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 69f484733..c17366d5a 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 aa9cf041e..085195095 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 6ac52c10f..3e30e4dbf 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 b1f385c5f..3e6b68295 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 @@ void VG_(sigframe_create) ( ThreadId tid,
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 1b1c33772..88d7d6217 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 68c32b0d2..b1a210b1c 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 31f5f7297..3d83f4e09 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 5ec37aadf..e8aee0446 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 8c7bdba59..d8fe50e8b 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_mips32_linux)( UWord v0, UWord v1,
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 49dbc1ee8..0b5b54bd6 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 @@ extern void VG_(fixup_guest_state_after_syscall_interrupted)(
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_(show_open_fds) ( const HChar* when );
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 230c41d6d..d2aa2514c 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 @@ typedef
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 @@ typedef
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 6968a18ee..41da98693 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 @@ typedef struct {
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 763072915..eda5ec65e 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 Addr VG_(mips64_linux_SUBST_FOR_rt_sigreturn);
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 486662986..4c0b06823 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 291f9dfb8..e9f3bc26e 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 224a9cc7b..a54b39311 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 937778f06..d9e459c59 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 @@ typedef
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 0b10ea414..8e8860074 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 4ceb625c8..dcdfc893d 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 284c05035..b472edb4d 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 c720216a7..11dc8303e 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 a7fab9711..bbe5f94e6 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 dec2ac5f2..85cd432ae 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 @@ void VG_REPLACE_FUNCTION_ZU(libSystemZdZaZddylib, arc4random_addrandom)(unsigned
// 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 9b6b90c1a..4b1fe2dc3 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 8e7e42e5a..d65f59aa4 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 @@ Bool waitstopped (pid_t pid, int signal_expected, const char *msg)
}
/* 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 @@ Bool stop (pid_t pid, const char *msg)
}
/* 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 @@ Bool getregs (pid_t pid, void *regs, long regs_bsz)
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 @@ Bool getregs (pid_t pid, void *regs, long regs_bsz)
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 000000000..019441bcf
--- /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 bcfb6c3dc..d35d5b218 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 @@ void *invoke_gdbserver_in_valgrind(void *v_pid)
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 4f901b95c..6d4c0814c 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 3dc3cb4d0..f2fd6f58a 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 000000000..e745cf02e
--- /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 155fe5ebe..2f4c57e6d 100644
--- a/docs/README
+++ b/docs/README
@@ -81,6 +81,22 @@ Notes on building PDF / PS documents
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 fe5f516b4..768a785c0 100644
--- a/docs/internals/3_10_BUGSTATUS.txt
+++ b/docs/internals/3_10_BUGSTATUS.txt
@@ -4,46 +4,33 @@ go in here.
=== 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)
-=== VEX/arm ============================================================
-
-335618 mov.w rN, pc/sp (ARM32)
- HAS PATCH
+349304 vex amd64->IR: 0xF 0x33 0x89 0x45 0xFC 0x89 0x55 0xF8 (rdpmc)
+ Is going to be difficult to do
-342680 arm: unhanded instruction 0xF590F000: pldw [r0]
+=== VEX/arm ============================================================
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 @@ go in here.
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 @@ go in here.
=== 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 @@ go in here.
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
-=== Tools/Memcheck =====================================================
+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
-339499 memcheck does not always detect access beyond mmaped page
- probably wontfix
+345975 Artificial functions in backtrace
+ more Dwarf complexity
-339762 missing replacement alias for glibc __strchr_sse42, __strcpy_sse2,
- __strcpy_ssse3
- obscure?
+=== Tools/Memcheck =====================================================
340392 Incorrect "Conditional jump..." message
Optimised code a la Clang
- PROBABLE CANTFIX
+ Probable CANTFIX
+ (but should we add a command line flag for it?)
+
+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
-342683 memory past the brk limit is not initially inaccessible/unaddressable
+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 @@ go in here.
== 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 @@ go in here.
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 @@ go in here.
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 @@ go in here.
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 @@ go in here.
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
-=== other/Win32 =======================================================
+349804 wine/osx: mmap-FIXED(0x1000, 1073741824) failed in UME (load_segment2)
-211529 valgrind doesn't show proper call stacks for programs compiled
- by newer versions of visual c++
+351632 UNKNOWN fcntl 97 on OS X 10.11
+
+=== other/Win32 =======================================================
-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 @@ go in here.
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,29 +308,25 @@ go in here.
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!
+343553 e500 chip now supports it? and,how about armv5
-339542 Experiences with compiling valgrind with ICC
- possibly closable now
+344019 new tool: trackptr to track pointer usage
-339636 Use fxsave64 and fxrstor64 mnemonics instead of rex64 prefix
- Should apply
+344401 x32 ABI support
-342008 valgrind.h needs type cast for _zzq_default to compile with
- clang/llvm in 64-bit mode
+348342 Valgrind does not support android-x86_64
-343553 e500 chip now supports it? and,how about armv5
+349954 Cannot start memcheck: permission denied
========================================================================
========================================================================
@@ -295,148 +343,8 @@ arm64 critical regtest fails:
========================================================================
========================================================================
-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 f526c4fe8..85c9e8e48 100644
--- a/docs/internals/Darwin-notes.txt
+++ b/docs/internals/Darwin-notes.txt
@@ -69,13 +69,6 @@ Valgrind-developer notes, todos re the MacOSX port
- 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 979318226..c0757eec1 100644
--- a/docs/internals/s390-opcodes.csv
+++ b/docs/internals/s390-opcodes.csv
@@ -293,9 +293,9 @@ ltebr,"load and test short bfp",implemented,
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 a147eaa4c..ccb22b44d 100644
--- a/docs/internals/xml-output-protocol4.txt
+++ b/docs/internals/xml-output-protocol4.txt
@@ -719,6 +719,7 @@ Definition:
<clientmsg>
<tid>INT</tid>
+ <threadname>NAME</threadname> if set
<text>...</text>
</clientmsg>
@@ -726,12 +727,17 @@ OR
<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 37b2ce306..e4021ed92 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 409cddf69..b767825c5 100644
--- a/docs/xml/manual-core-adv.xml
+++ b/docs/xml/manual-core-adv.xml
@@ -1479,6 +1479,14 @@ problems or bugs.</para>
</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 5437bd536..edda8a1e4 100644
--- a/docs/xml/manual-core.xml
+++ b/docs/xml/manual-core.xml
@@ -1412,11 +1412,13 @@ that can report errors, e.g. Memcheck, but not Cachegrind.</para>
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 @@ that can report errors, e.g. Memcheck, but not Cachegrind.</para>
</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 @@ that can report errors, e.g. Memcheck, but not Cachegrind.</para>
<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 @@ need to use them.</para>
<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 @@ need to use them.</para>
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 @@ need to use them.</para>
<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 @@ need to use them.</para>
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 @@ things. If you wish to see the list, use the
<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 aeca2760c..1d8f322d8 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 e0c407ca0..7692dacea 100644
--- a/drd/docs/drd-manual.xml
+++ b/drd/docs/drd-manual.xml
@@ -505,6 +505,42 @@ behavior of the DRD tool itself:</para>
</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 1e9685713..4615e5b4c 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 24bec960f..e1ab131ce 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 @@ void DRD_(barrier_init)(const Addr barrier,
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 @@ void DRD_(barrier_destroy)(const Addr barrier, const BarrierT barrier_type)
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 @@ void DRD_(barrier_pre_wait)(const DrdThreadId tid, const Addr barrier,
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 @@ void DRD_(barrier_post_wait)(const DrdThreadId tid, const Addr barrier,
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 57a48c760..c57180765 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 7ad313920..57b2df0c7 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 0b2b099a8..df7691ab4 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 0b4715753..94b52855d 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 44234f9c2..7bc10183a 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 @@ DrdClientobj* DRD_(clientobj_add)(const Addr a1, const ObjType t)
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 @@ static Bool clientobj_remove_obj(DrdClientobj* const p)
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 b3190ab70..16fe562da 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 bed68aac9..47405d3aa 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 @@ static Bool handle_client_request(ThreadId vg_tid, UWord* arg, UWord* ret)
}
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 929b60d10..5d9b9b32a 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 @@ enum {
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 bcdef3066..efc8e2340 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 @@ void DRD_(cond_pre_init)(const Addr cond)
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 @@ void DRD_(cond_post_destroy)(const Addr cond, const Bool destroy_succeeded)
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 @@ void DRD_(cond_pre_wait)(const Addr cond, const Addr mutex)
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 @@ void DRD_(cond_post_wait)(const Addr cond)
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 @@ void DRD_(cond_pre_signal)(Addr const cond)
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 @@ void DRD_(cond_pre_broadcast)(Addr const cond)
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 7cfa48cc1..3f5857d12 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 08cd467d6..25ce9fb11 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 c510b8820..fb116f6b2 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 @@ void drd_report_data_race(const Error* const err,
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 @@ void drd_report_data_race(const Error* const err,
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 @@ static void drd_tool_error_pp(const Error* const e)
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 @@ static void drd_tool_error_pp(const Error* const e)
}
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 @@ static void drd_tool_error_pp(const Error* const e)
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 @@ static void drd_tool_error_pp(const Error* const e)
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 0825eff52..7f80d44e1 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 aeb9dedd7..5688feb13 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 @@ void DRD_(hb_happens_before)(const DrdThreadId tid, Addr const hb)
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 @@ void DRD_(hb_happens_after)(const DrdThreadId tid, const Addr hb)
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 @@ void DRD_(hb_happens_done)(const DrdThreadId tid, const Addr hb)
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 7616b0abc..86432fc7a 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 99cbd3f5c..82a583d18 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 88e4d44e1..f968bcc1d 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 @@ void DRD_(trace_mem_access)(const Addr addr, const SizeT size,
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 @@ void DRD_(trace_mem_access)(const Addr addr, const SizeT size,
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 ec8b4a5d1..9e649e8ae 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 0960fe5de..69b7f4561 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 @@ static Bool DRD_(process_cmd_line_option)(const HChar* arg)
{}
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 @@ static Bool DRD_(process_cmd_line_option)(const HChar* arg)
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 @@ static void DRD_(print_usage)(void)
" 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 @@ static void DRD_(print_usage)(void)
" --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 @@ void drd_start_using_mem(const Addr a1, const SizeT len,
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 @@ void drd_stop_using_mem(const Addr a1, const SizeT len,
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 @@ static void DRD_(suppress_relocation_conflicts)(const Addr a, const SizeT len)
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 @@ static void DRD_(suppress_relocation_conflicts)(const Addr a, const SizeT len)
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 @@ static void DRD_(suppress_relocation_conflicts)(const Addr a, const SizeT len)
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 @@ static void DRD_(suppress_relocation_conflicts)(const Addr a, const SizeT len)
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 @@ static void DRD_(suppress_relocation_conflicts)(const Addr a, const SizeT len)
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 @@ void drd_pre_thread_create(const ThreadId creator, const ThreadId created)
}
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 @@ void drd_post_thread_create(const ThreadId vg_created)
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 @@ static void drd_thread_finished(ThreadId vg_tid)
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 @@ static void drd_thread_finished(ThreadId vg_tid)
= (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 @@ void drd__atfork_child(ThreadId tid)
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 @@ static void DRD_(fini)(Int exitcode)
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 @@ void drd_pre_clo_init(void)
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 369936de5..e742ed788 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 6a9b6fd16..79bb67d1f 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 650000683..4fe30e5b4 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 @@ void DRD_(mutex_ignore_ordering)(const Addr mutex)
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 @@ static void mutex_cleanup(struct mutex_info* p)
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 @@ DRD_(mutex_init)(const Addr mutex, const MutexT mutex_type)
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 @@ void DRD_(mutex_pre_lock)(const Addr mutex, MutexT mutex_type,
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 @@ void DRD_(mutex_post_lock)(const Addr mutex, const Bool took_lock,
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 @@ void DRD_(mutex_unlock)(const Addr mutex, MutexT mutex_type)
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 953045af8..e2bbc1be1 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 a3119deaf..279366076 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 @@ static int never_true;
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 @@ static int never_true;
typedef struct {
pthread_mutex_t mutex;
+ pthread_cond_t cond;
int counter;
- int waiters;
} DrdSema;
typedef struct
@@ -177,6 +251,15 @@ static void DRD_(init)(void)
{
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 @@ static void DRD_(sema_init)(DrdSema* sema)
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 @@ static void DRD_(sema_up)(DrdSema* sema)
{
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 @@ static MutexT DRD_(pthread_to_drd_mutex_type)(int kind)
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 @@ static __always_inline MutexT DRD_(mutex_type)(pthread_mutex_t* mutex)
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 @@ PTH_FUNCS(int, pthreadZucreate, pthread_create_intercept,
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 @@ PTH_FUNCS(int, pthreadZujoin, pthread_join_intercept,
(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 @@ PTH_FUNCS(int, pthreadZumutexZuinit, pthread_mutex_init_intercept,
(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 @@ int pthread_mutex_destroy_intercept(pthread_mutex_t* mutex)
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 @@ int pthread_mutex_lock_intercept(pthread_mutex_t* mutex)
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 @@ int pthread_mutex_trylock_intercept(pthread_mutex_t* mutex)
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 @@ int pthread_mutex_timedlock_intercept(pthread_mutex_t *mutex,
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 @@ int pthread_mutex_unlock_intercept(pthread_mutex_t *mutex)
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 @@ PTH_FUNCS(int, pthreadZucondZuinit, pthread_cond_init_intercept,
(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 @@ int pthread_cond_destroy_intercept(pthread_cond_t* cond)
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 @@ int pthread_cond_wait_intercept(pthread_cond_t *cond, pthread_mutex_t *mutex)
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 @@ PTH_FUNCS(int, pthreadZucondZutimedwait, pthread_cond_timedwait_intercept,
(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 @@ int pthread_cond_signal_intercept(pthread_cond_t* cond)
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 @@ int pthread_cond_broadcast_intercept(pthread_cond_t* cond)
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 @@ int sem_init_intercept(sem_t *sem, int pshared, unsigned int value)
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 @@ int sem_destroy_intercept(sem_t *sem)
}
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 @@ static __always_inline int sem_wait_intercept(sem_t *sem)
}
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 @@ static __always_inline int sem_trywait_intercept(sem_t *sem)
}
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 @@ int sem_timedwait_intercept(sem_t *sem, const struct timespec *abs_timeout)
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 @@ static __always_inline int sem_post_intercept(sem_t *sem)
}
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 @@ PTH_FUNCS(int,
(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 @@ int pthread_rwlock_destroy_intercept(pthread_rwlock_t* rwlock)
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 @@ int pthread_rwlock_rdlock_intercept(pthread_rwlock_t* rwlock)
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 @@ int pthread_rwlock_wrlock_intercept(pthread_rwlock_t* rwlock)
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 @@ PTH_FUNCS(int,
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 @@ PTH_FUNCS(int,
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 @@ int pthread_rwlock_tryrdlock_intercept(pthread_rwlock_t* rwlock)
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 @@ int pthread_rwlock_trywrlock_intercept(pthread_rwlock_t* rwlock)
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 @@ int pthread_rwlock_unlock_intercept(pthread_rwlock_t* rwlock)
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 85c5a53a1..9a6b8e916 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 db589a0be..30c0f20da 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 @@ static void rwlock_cleanup(struct rwlock_info* p)
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* DRD_(rwlock_pre_init)(const Addr rwlock,
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 @@ void DRD_(rwlock_pre_rdlock)(const Addr rwlock, const RwLockT rwlock_type)
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 @@ void DRD_(rwlock_post_rdlock)(const Addr rwlock, const RwLockT rwlock_type,
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 @@ void DRD_(rwlock_pre_wrlock)(const Addr rwlock, const RwLockT rwlock_type)
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 @@ void DRD_(rwlock_post_wrlock)(const Addr rwlock, const RwLockT rwlock_type,
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 @@ void DRD_(rwlock_pre_unlock)(const Addr rwlock, const RwLockT rwlock_type)
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 dc10da043..8728c9caa 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 a625f4743..a6c0bbc23 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 @@ static void sg_init(Segment* const sg,
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 121010a92..de265db54 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 40662b950..f5bad6cb0 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 @@ void DRD_(semaphore_set_trace)(const Bool trace_semaphore)
/**
* 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 @@ struct semaphore_info* DRD_(semaphore_init)(const Addr semaphore,
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 @@ void DRD_(semaphore_destroy)(const Addr semaphore)
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 @@ struct semaphore_info* DRD_(semaphore_open)(const Addr semaphore,
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 @@ void DRD_(semaphore_close)(const Addr semaphore)
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 @@ void DRD_(semaphore_post_wait)(const DrdThreadId tid, const Addr semaphore,
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 @@ void DRD_(semaphore_pre_post)(const DrdThreadId tid, const Addr semaphore)
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 3172cec3d..aa6b6f3e4 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 139117ca3..a538134c0 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 6d884349e..c87907857 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 @@ void DRD_(start_suppression)(const Addr a1, const Addr a2,
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_(start_suppression)(const Addr a1, const Addr a2,
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 @@ void DRD_(start_tracing_address_range)(const Addr a1, const Addr a2,
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 @@ void DRD_(stop_tracing_address_range)(const Addr a1, const Addr a2)
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 @@ void DRD_(suppression_stop_using_mem)(const Addr a1, const Addr a2)
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 247dd91eb..9bb320091 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 int s_segment_merge_interval = 10;
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 @@ static DrdThreadId DRD_(VgThreadIdToNewDrdThreadId)(const ThreadId tid)
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 @@ DrdThreadId DRD_(thread_pre_create)(const DrdThreadId creator,
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 @@ void DRD_(thread_post_join)(DrdThreadId drd_joiner, DrdThreadId drd_joinee)
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 @@ void DRD_(thread_pre_cancel)(const DrdThreadId tid)
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 @@ void DRD_(thread_set_pthreadid)(const DrdThreadId tid, const PThreadId ptid)
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 @@ void DRD_(thread_entering_pthread_create)(const DrdThreadId tid)
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 @@ void DRD_(thread_left_pthread_create)(const DrdThreadId tid)
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 @@ void DRD_(thread_set_name)(const DrdThreadId tid, const HChar* const name)
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 @@ void DRD_(thread_set_running_tid)(const ThreadId vg_tid,
&& 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 @@ static void thread_combine_vc_sync(DrdThreadId tid, const Segment* sg)
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 @@ static void thread_combine_vc_sync(DrdThreadId tid, const Segment* sg)
/**
* 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_set_record_stores)(const DrdThreadId tid, const Bool enabled)
*/
void DRD_(thread_print_all)(void)
{
- unsigned i;
+ UInt i;
Segment* p;
for (i = 0; i < DRD_N_THREADS; i++)
@@ -1244,7 +1312,7 @@ void DRD_(thread_print_all)(void)
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 @@ thread_report_conflicting_segments_segment(const DrdThreadId tid,
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 @@ static void thread_compute_conflict_set(struct bitmap** conflict_set,
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 @@ static void thread_compute_conflict_set(struct bitmap** conflict_set,
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 @@ static void thread_compute_conflict_set(struct bitmap** conflict_set,
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 @@ static void thread_compute_conflict_set(struct bitmap** conflict_set,
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 @@ static void thread_compute_conflict_set(struct bitmap** conflict_set,
+= 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 @@ void DRD_(thread_update_conflict_set)(const DrdThreadId tid,
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 @@ void DRD_(thread_update_conflict_set)(const DrdThreadId tid,
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 @@ void DRD_(thread_update_conflict_set)(const DrdThreadId tid,
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 @@ void DRD_(thread_update_conflict_set)(const DrdThreadId tid,
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 28068a7be..eece0a4cc 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 @@ typedef struct
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 @@ extern ThreadInfo* DRD_(g_threadinfo);
/** 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 @@ Bool DRD_(thread_get_joinable)(const DrdThreadId tid);
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 7687c02a6..dce884e13 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 0da3b4edd..49e8aa3b2 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 @@ HChar* DRD_(vc_aprint)(const VectorClock* const vc)
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 91671fbb6..fe3cf0b63 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 7765dff5d..ac5918bb6 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 cb9809d08..086860542 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 a21e7091f..288539163 100644
--- a/drd/tests/Makefile.am
+++ b/drd/tests/Makefile.am
@@ -9,7 +9,9 @@ dist_noinst_SCRIPTS = \
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 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 @@ LDADD = -lpthread
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@
+
+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_cleanup_handler_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_EMPTY_BODY@
+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_CFLAGS = $(AM_CFLAGS) -fopenmp
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_LDFLAGS = -fopenmp
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_string_CXXFLAGS = $(AM_CXXFLAGS) -std=c++0x -Wno-sign-compare
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 000000000..a35389f13
--- /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 000000000..fa619799e
--- /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 000000000..2511ff1c6
--- /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 a66a1494a..9347e4ecd 100755
--- a/drd/tests/filter_stderr
+++ b/drd/tests/filter_stderr
@@ -6,6 +6,13 @@ sed -e "s:_pthread_start (in /usr/lib/libSystem.B.dylib):(within libpthread-?.?.
$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 000000000..781f97e90
--- /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 000000000..458b5b650
--- /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 000000000..05ffe71e5
--- /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 da2a6e453..4deae673e 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 c9d5ec1c6..5a32480dc 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 96a0f0f0f..327bcccc0 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 59381c963..e4f727b43 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 854ee34ed..7fdffe18f 100644
--- a/drd/tests/pth_barrier.c
+++ b/drd/tests/pth_barrier.c
@@ -50,13 +50,13 @@ static void* threadfunc(struct threadinfo* p)
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 000000000..392bc1d0f
--- /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 fb95fd8a9..6691e84a2 100644
--- a/drd/tests/pth_inconsistent_cond_wait.c
+++ b/drd/tests/pth_inconsistent_cond_wait.c
@@ -107,7 +107,8 @@ int main(int argc, char** argv)
}
/* 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 000000000..146b0952e
--- /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 958bc6b76..7f00ca0e6 100644
--- a/drd/tests/sem_open.c
+++ b/drd/tests/sem_open.c
@@ -58,8 +58,8 @@ int main(int argc, char** argv)
* 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 85987ab20..2484a6d0a 100644
--- a/drd/tests/sigalrm.c
+++ b/drd/tests/sigalrm.c
@@ -32,8 +32,8 @@ static void print_thread_id(const char* const label)
{
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 8a35fb3d5..266c93fa5 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 000000000..a517b71f0
--- /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 6ba7b1862..73163e7b2 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 0cb3825cb..21e698113 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 000000000..9c2b27864
--- /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 f931e48ee..c6cd1cafb 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 57bb3107c..79fea6b84 100644
--- a/drd/tests/tsan_unittest.cpp
+++ b/drd/tests/tsan_unittest.cpp
@@ -97,6 +97,10 @@ static inline void IGNORE_RETURN_VALUE(T v)
#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 @@ void Run() {
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 db7835f41..5a55593ce 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 @@ static void dumpPcFile(void)
/* 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 @@ static void bbv_fini(Int exitcode)
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 @@ static void bbv_pre_clo_init(void)
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 fca36e561..595f36933 100644
--- a/exp-bbv/tests/x86/complex_rep.S
+++ b/exp-bbv/tests/x86/complex_rep.S
@@ -48,12 +48,18 @@ rep_loop:
#================================
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 ef4c3a70a..52f9433d9 100644
--- a/exp-bbv/tests/x86/fldcw_check.S
+++ b/exp-bbv/tests/x86/fldcw_check.S
@@ -99,26 +99,39 @@ big_loop:
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
+ movl $1, %eax # SYSCALL_EXIT
+#if defined(VGO_darwin)
pushl result
-#else
+ int $0x80
+#elif defined(VGO_linux)
movl result, %ebx # load converted value
-#endif
- movl $1, %eax # SYSCALL_EXIT
int $0x80
-
+#elif defined(VGO_solaris)
+ pushl result
+ int $0x91
+#else
+# error "Unknown OS"
+#endif
.data
@@ -127,4 +140,4 @@ cw: .long 0
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 0d72b000c..e034cc8ff 100644
--- a/exp-bbv/tests/x86/million.S
+++ b/exp-bbv/tests/x86/million.S
@@ -20,14 +20,17 @@ test_loop:
# 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 346248c89..4588815ef 100644
--- a/exp-bbv/tests/x86/rep_prefix.S
+++ b/exp-bbv/tests/x86/rep_prefix.S
@@ -246,33 +246,47 @@ compare_noteq:
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 471c3edc6..e636ccb4a 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 @@ void* new_block ( ThreadId tid, void* p, SizeT req_szB, SizeT req_alignB,
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 @@ void die_block ( void* p, Bool custom_free )
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 @@ static void dh_pre_clo_init(void)
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 64bc7f7da..2ec1836f3 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 @@ STRRCHR(VG_Z_LD_LINUX_SO_2, rindex)
#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 @@ STRCHR(VG_Z_LD_LINUX_X86_64_SO_2, index)
#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_LIBC_SONAME, __GI_strlen)
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, strcpy)
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, strcmp)
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 @@ MEMCPY(VG_Z_LIBC_SONAME, memcpy)
#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 @@ GLIBC232_RAWMEMCHR(VG_Z_LIBC_SONAME, __GI___rawmemchr)
#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 @@ STRSTR(VG_Z_LIBC_SONAME, strstr)
#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 fc2650d2b..84a3cfcee 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 b52af8c70..ddba8a547 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 de6bb16ce..d891d444a 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 @@ void pc_pp_Error ( const Error* err )
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 @@ void pc_pp_Error ( const Error* err )
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 @@ void pc_pp_Error ( const Error* err )
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 @@ void pc_pp_Error ( const Error* err )
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 @@ void pc_pp_Error ( const Error* err )
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 @@ void pc_pp_Error ( const Error* err )
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 932e850dc..22e87b4e9 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 19d78d49e..f3f59071f 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 @@ static void pc_pre_clo_init(void)
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 0b2c50ef5..d961abf6b 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 @@ typedef
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 @@ static void classify_address ( /*OUT*/Invar* inv,
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 @@ void shadowStack_new_frame ( ThreadId tid,
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 007c63b64..2d3d84601 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 fbc0a8369..a0e50bf2a 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 a679a822a..0f92ab3f1 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 b84d395d8..95a282906 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 b03f438b1..cdf35ba11 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 3c880bc94..cbd0d5284 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 80481eb56..8f20a4fe4 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 d5a030659..bdf0c5b84 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 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 239e76f37..df9479f6d 100755
--- a/gdbserver_tests/filter_gdb
+++ b/gdbserver_tests/filter_gdb
@@ -44,6 +44,8 @@ sed -e '/^\ \ \ \ \.\.\.$/d' |
# 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 @@ sed -e '/Remote debugging using/,/vgdb launched process attached/d'
-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 @@ sed -e '/Remote debugging using/,/vgdb launched process attached/d'
-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 @@ sed -e '/Remote debugging using/,/vgdb launched process attached/d'
-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 bba945425..dc8648074 100755
--- a/gdbserver_tests/filter_helgrind_monitor
+++ b/gdbserver_tests/filter_helgrind_monitor
@@ -9,5 +9,12 @@ $dir/../helgrind/tests/filter_stderr "$@" |
# 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 000000000..f3cded088
--- /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 000000000..6b86f381f
--- /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 866457777..a80883ead 100755
--- a/gdbserver_tests/filter_stderr
+++ b/gdbserver_tests/filter_stderr
@@ -10,4 +10,5 @@ sed -e '/^Copyright (C) /d' \
-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 92d878df3..ed8863b91 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 1fb3f20a3..e8e621b3d 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 e452b3075..6d7e3bbb6 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 @@ static void another_func(char *msg)
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 cbdfef5e4..001609a99 100755
--- a/gdbserver_tests/make_local_links
+++ b/gdbserver_tests/make_local_links
@@ -95,6 +95,7 @@ else
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 @@ fi
# 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 4f932e6af..556da9e6c 100644
--- a/gdbserver_tests/mcbreak.stdinB.gdb
+++ b/gdbserver_tests/mcbreak.stdinB.gdb
@@ -16,8 +16,8 @@ define checkstep
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 sleeps=1
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 e12d2e448..ba526daca 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 d3c61a1c8..6d6bdb146 100644
--- a/gdbserver_tests/mchelp.stdoutB.exp
+++ b/gdbserver_tests/mchelp.stdoutB.exp
@@ -13,10 +13,14 @@ general valgrind monitor commands:
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 @@ memcheck monitor commands:
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 @@ debugging valgrind internals monitor commands:
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 @@ debugging valgrind internals monitor commands:
(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 @@ memcheck monitor commands:
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 a193acf6b..0c7b0793a 100644
--- a/gdbserver_tests/mcinfcallRU.vgtest
+++ b/gdbserver_tests/mcinfcallRU.vgtest
@@ -7,7 +7,7 @@ vgopts: --tool=memcheck --vgdb=yes --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-mc
# 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 571054529..77891233e 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 f9c1983af..fd3922f54 100644
--- a/gdbserver_tests/mcinfcallWSRU.vgtest
+++ b/gdbserver_tests/mcinfcallWSRU.vgtest
@@ -7,7 +7,7 @@ args: 100 100000000 1000000000 -S-S-SB-
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 000000000..cd1639319
--- /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 46e19f982..8ec0a6f27 100644
--- a/gdbserver_tests/mcmain_pic.stdinB.gdb
+++ b/gdbserver_tests/mcmain_pic.stdinB.gdb
@@ -4,7 +4,7 @@ echo vgdb launched process attached\n
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 ffac737b1..e0a46c511 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 3708ffbea..7b0a80e5e 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 e3499411b..d77f9832a 100644
--- a/gdbserver_tests/mcsignopass.stdoutB.exp
+++ b/gdbserver_tests/mcsignopass.stdoutB.exp
@@ -6,54 +6,54 @@ Signal Stop Print Pass to program Description
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 80659b866..bd67a7ec9 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 4c2d79970..de6c2634f 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 6b4635e5a..bdabb1eca 100644
--- a/gdbserver_tests/mcvabits.stderrB.exp
+++ b/gdbserver_tests/mcvabits.stderrB.exp
@@ -5,6 +5,10 @@ Address 0x........ len 10 addressable
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 21c7d0d1c..f0e480b62 100644
--- a/gdbserver_tests/mcvabits.stdinB.gdb
+++ b/gdbserver_tests/mcvabits.stdinB.gdb
@@ -23,6 +23,7 @@ set $0xundefined = &undefined
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 e8d366156..c0aadc8a2 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 a2a7c5531..ba439977e 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 70f355b0a..a1013ce5e 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 @@ $4 = 0
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 e18c46831..077b2bb81 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 86aecfd5c..e1e9f24fd 100644
--- a/gdbserver_tests/nlgone_abrt.vgtest
+++ b/gdbserver_tests/nlgone_abrt.vgtest
@@ -10,3 +10,4 @@ argsB: --quiet -l 60 --nx ./gone
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 02a20a7af..521c19df9 100644
--- a/gdbserver_tests/nlgone_exit.vgtest
+++ b/gdbserver_tests/nlgone_exit.vgtest
@@ -7,6 +7,7 @@ vgopts: --tool=none --vgdb=yes --vgdb-stop-at=startup,exit --vgdb-prefix=./vgdb-
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 708a3a328..625883e06 100644
--- a/gdbserver_tests/nlpasssigalrm.stdoutB.exp
+++ b/gdbserver_tests/nlpasssigalrm.stdoutB.exp
@@ -16,7 +16,7 @@ Breakpoint 2, main (argc=1, argv=0x........) at passsigalrm.c:55
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 5c4e3952e..0450207a6 100644
--- a/gdbserver_tests/nlpasssigalrm.vgtest
+++ b/gdbserver_tests/nlpasssigalrm.vgtest
@@ -11,5 +11,5 @@ prereq: test -e gdb
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 000000000..5cd0e7518
--- /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 000000000..2eca10b68
--- /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 e06e0cd74..64ab0eaf4 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 pid_t gettid()
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 @@ static void *sleeper_or_burner(void *v)
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 000000000..e9ebcc8fc
--- /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 000000000..0ae9313a9
--- /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 000000000..3f06448ff
--- /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
index e69de29bb..e69de29bb 100644
--- a/none/tests/scripts/shell_nointerp1.stderr.exp
+++ b/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 000000000..182834fb9
--- /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 000000000..e952c5041
--- /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 000000000..2723570fa
--- /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 89ce57d04..228d4a42e 100644
--- a/gdbserver_tests/t.c
+++ b/gdbserver_tests/t.c
@@ -26,7 +26,8 @@ static pid_t gettid()
}
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 b61a33955..ed105b8db 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 c6839fd05..28d4d9b48 100644
--- a/helgrind/docs/hg-manual.xml
+++ b/helgrind/docs/hg-manual.xml
@@ -1190,6 +1190,51 @@ unlock(mx) unlock(mx)
</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 7e27f5c6f..d194c4473 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 @@ typedef
_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 @@ typedef
_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 @@ typedef
_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 @@ typedef
/* 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 @@ typedef
/* 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 @@ typedef
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 @@ typedef
/* 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 abf5aa5c4..53f98fcba 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 32d7842b9..14f712a37 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 4a039c988..67946833b 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_history_level) = 2;
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 737cfa0eb..040765d25 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 @@ extern Bool HG_(clo_cmp_race_err_addrs);
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 @@ extern UWord HG_(clo_conflict_cache_size);
/* 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 d2058d546..dcb502a64 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 @@ void HG_(pp_Error) ( const Error* err )
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 @@ void HG_(pp_Error) ( const Error* err )
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 @@ void HG_(print_access) (StackTrace ips, UInt n_ips,
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 3c4dd3bed..e8b0e573f 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 f109bf3e1..fd53208e5 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 @@ static const HChar* lame_strerror ( long err )
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 @@ static void* mythread_wrapper ( void* xargsV )
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 @@ static int pthread_create_WRK(pthread_t *thread, const pthread_attr_t *attr,
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 @@ static int pthread_create_WRK(pthread_t *thread, const pthread_attr_t *attr,
// 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 @@ static int pthread_join_WRK(pthread_t thread, void** value_pointer)
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 @@ static int pthread_join_WRK(pthread_t thread, void** value_pointer)
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 @@ That's the key. The kernel resets the TID field after the thread is
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 @@ void I_WRAP_SONAME_FNNAME_ZU
*/
//-----------------------------------------------------------
+#if !defined(VGO_solaris)
// glibc: pthread_mutex_init
// darwin: pthread_mutex_init
PTH_FUNC(int, pthreadZumutexZuinit, // pthread_mutex_init
@@ -527,12 +788,45 @@ PTH_FUNC(int, pthreadZumutexZuinit, // pthread_mutex_init
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 @@ PTH_FUNC(int, pthreadZumutexZudestroy, // pthread_mutex_destroy
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 @@ PTH_FUNC(int, pthreadZumutexZulock, // pthread_mutex_lock
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 @@ PTH_FUNC(int, pthreadZumutexZulock, // pthread_mutex_lock
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 @@ PTH_FUNC(int, pthreadZumutexZulock, // pthread_mutex_lock
// 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 @@ PTH_FUNC(int, pthreadZumutexZutrylock, // pthread_mutex_trylock
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 @@ PTH_FUNC(int, pthreadZumutexZutrylock, // pthread_mutex_trylock
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 @@ PTH_FUNC(int, pthreadZumutexZutimedlock, // pthread_mutex_timedlock
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 @@ PTH_FUNC(int, pthreadZumutexZutimedlock, // pthread_mutex_timedlock
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 @@ PTH_FUNC(int, pthreadZumutexZuunlock, // pthread_mutex_unlock
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 @@ PTH_FUNC(int, pthreadZumutexZuunlock, // pthread_mutex_unlock
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 @@ PTH_FUNC(int, pthreadZumutexZuunlock, // pthread_mutex_unlock
*/
//-----------------------------------------------------------
-// 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 @@ static int pthread_cond_wait_WRK(pthread_cond_t* cond,
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 @@ static int pthread_cond_wait_WRK(pthread_cond_t* cond,
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 @@ static int pthread_cond_timedwait_WRK(pthread_cond_t* cond,
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 @@ static int pthread_cond_timedwait_WRK(pthread_cond_t* cond,
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 @@ static int pthread_cond_signal_WRK(pthread_cond_t* cond)
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 @@ static int pthread_cond_signal_WRK(pthread_cond_t* cond)
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 @@ static int pthread_cond_broadcast_WRK(pthread_cond_t* cond)
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 @@ static int pthread_cond_broadcast_WRK(pthread_cond_t* cond)
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 @@ static int pthread_cond_init_WRK(pthread_cond_t* cond, pthread_condattr_t *cond_
# 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 @@ static int pthread_cond_destroy_WRK(pthread_cond_t* cond)
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 @@ static int pthread_cond_destroy_WRK(pthread_cond_t* cond)
*/
//-----------------------------------------------------------
-// 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 @@ PTH_FUNC(int, pthreadZubarrierZuinit, // pthread_barrier_init
//-----------------------------------------------------------
-// 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 @@ PTH_FUNC(int, pthreadZubarrierZuwait, // pthread_barrier_wait
//-----------------------------------------------------------
-// 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 @@ PTH_FUNC(int, pthreadZubarrierZudestroy, // pthread_barrier_destroy
/* 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 @@ static int pthread_spin_init_or_unlock_WRK(pthread_spinlock_t* lock,
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 @@ PTH_FUNC(int, pthreadZuspinZudestroy, // pthread_spin_destroy
}
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 @@ PTH_FUNC(int, pthreadZuspinZulock, // pthread_spin_lock
}
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 @@ PTH_FUNC(int, pthreadZuspinZutrylock, // pthread_spin_trylock
}
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 @@ PTH_FUNC(int, pthreadZuspinZutrylock, // pthread_spin_trylock
pthread_rwlock_rdlock
pthread_rwlock_wrlock
pthread_rwlock_unlock
-
- Unhandled: pthread_rwlock_timedrdlock
pthread_rwlock_tryrdlock
+ pthread_rwlock_trywrlock
+ Unhandled: pthread_rwlock_timedrdlock
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 @@ static int pthread_rwlock_init_WRK(pthread_rwlock_t *rwl,
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 @@ static int pthread_rwlock_destroy_WRK(pthread_rwlock_t* rwl)
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 @@ static int pthread_rwlock_wrlock_WRK(pthread_rwlock_t* rwlock)
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 @@ static int pthread_rwlock_wrlock_WRK(pthread_rwlock_t* rwlock)
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 @@ static int pthread_rwlock_rdlock_WRK(pthread_rwlock_t* rwlock)
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 @@ static int pthread_rwlock_rdlock_WRK(pthread_rwlock_t* rwlock)
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 @@ static int pthread_rwlock_trywrlock_WRK(pthread_rwlock_t* rwlock)
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 @@ static int pthread_rwlock_trywrlock_WRK(pthread_rwlock_t* rwlock)
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 @@ static int pthread_rwlock_tryrdlock_WRK(pthread_rwlock_t* rwlock)
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 @@ static int pthread_rwlock_tryrdlock_WRK(pthread_rwlock_t* rwlock)
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: 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
+// 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 @@ static int pthread_rwlock_unlock_WRK(pthread_rwlock_t* rwlock)
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 @@ static int pthread_rwlock_unlock_WRK(pthread_rwlock_t* rwlock)
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 @@ static int pthread_rwlock_unlock_WRK(pthread_rwlock_t* rwlock)
*/
//-----------------------------------------------------------
-// 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 @@ static int sem_init_WRK(sem_t* sem, int pshared, unsigned long value)
# 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 @@ static int sem_destroy_WRK(sem_t* sem)
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 @@ static int sem_destroy_WRK(sem_t* sem)
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 @@ static int sem_wait_WRK(sem_t* sem)
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 @@ static int sem_wait_WRK(sem_t* sem)
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 @@ static int sem_post_WRK(sem_t* sem)
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 @@ static int sem_post_WRK(sem_t* sem)
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 @@ PTH_FUNC(sem_t*, semZuopen,
//-----------------------------------------------------------
-// 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 @@ static void QMutex_lock_WRK(void* self)
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 @@ static long QMutex_tryLock_WRK(void* self)
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 @@ static long QMutex_tryLock_int_WRK(void* self, long arg2)
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 @@ QT5_FUNC(void*, _ZN6QMutexD2Ev, void* self)
//
// 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 @@ QT5_FUNC(void*, _ZN6QMutexD2Ev, void* self)
//
// 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 c2a26efe0..a452753e9 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 762619178..9fb4c8a22 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 @@ typedef
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 ccf1a56a5..bafa78f7a 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 @@ Lock* HG_(get_admin_locks) ( void ) { return admin_locks; }
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 @@ static Thread* mk_Thread ( Thr* hbthr ) {
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 @@ static void pp_Lock ( Int d, Lock* lk,
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 @@ static void map_threads_delete ( ThreadId coretid )
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_New ( Thread* thr, Addr a, SizeT len )
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_NoFX ( Thread* thr, Addr aIN, SizeT len )
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_NoAccess_AHAE ( Thread* thr, Addr aIN, SizeT len )
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 inline Thread* get_current_Thread ( void ) {
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 @@ static
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 @@ void evh__pre_thread_ll_create ( ThreadId parent, ThreadId child )
# 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 @@ void evh__pre_mem_read ( CorePart part, ThreadId tid, const HChar* s,
|| (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 @@ void evh__pre_mem_read_asciiz ( CorePart part, ThreadId tid,
// 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 @@ void evh__pre_mem_write ( CorePart part, ThreadId tid, const HChar* s,
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 @@ void evh__die_mem_heap ( Addr a, SizeT len ) {
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 @@ static VG_REGPARM(1)
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 @@ void evh__HG_USERSO_FORGET_ALL ( ThreadId tid, UWord usertag )
{
/* 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 @@ void evh__HG_USERSO_FORGET_ALL ( ThreadId tid, UWord usertag )
}
+#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 @@ static Bool is_in_dynamic_linker_shared_object( Addr ga )
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 @@ Bool hg_handle_client_request ( ThreadId tid, UWord* args, UWord* ret)
/* --- --- 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 @@ Bool hg_handle_client_request ( ThreadId tid, UWord* args, UWord* ret)
}
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 @@ Bool hg_handle_client_request ( ThreadId tid, UWord* args, UWord* ret)
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 @@ Bool hg_handle_client_request ( ThreadId tid, UWord* args, UWord* ret)
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 @@ Bool hg_handle_client_request ( ThreadId tid, UWord* args, UWord* ret)
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 @@ Bool hg_handle_client_request ( ThreadId tid, UWord* args, UWord* ret)
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 @@ Bool hg_handle_client_request ( ThreadId tid, UWord* args, UWord* ret)
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 @@ Bool hg_handle_client_request ( ThreadId tid, UWord* args, UWord* ret)
/* 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 @@ Bool hg_handle_client_request ( ThreadId tid, UWord* args, UWord* ret)
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 @@ Bool hg_handle_client_request ( ThreadId tid, UWord* args, UWord* ret)
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 @@ static Bool hg_process_cmd_line_option ( const HChar* arg )
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 @@ static void hg_print_usage ( void )
" --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 @@ static void hg_print_stats (void)
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 @@ static void hg_pre_clo_init ( void )
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 63066f1a1..e0f684513 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 e7a3b5e44..b431a0580 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 68754e6e2..963c490ff 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 a66d578a4..15a57dd43 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 @@ typedef ULong SVal;
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 @@ static __attribute__((noinline)) void cacheline_wback ( UWord wix )
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 @@ static void VTS__show ( const VTS* vts )
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 @@ static void vts_tab__do_GC ( Bool show_stats )
/* 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 @@ static void ctxt__rcinc ( RCEC* ec )
/* 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 @@ static void move_RCEC_one_step_forward ( RCEC** headp, RCEC* ec )
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 @@ static void record_race_info ( Thr* acc_thr,
(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 @@ static void zsm_sset_range ( Addr a, SizeT len, SVal svNew )
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 @@ void libhb_shutdown ( Bool show_stats )
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 @@ void libhb_shutdown ( Bool show_stats )
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 @@ void libhb_shutdown ( Bool show_stats )
/ (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 @@ static void zsm_sset_range_noaccess (Addr addr, SizeT len)
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 @@ void libhb_maybe_GC ( void )
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 0528fbccb..8a0d6e650 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 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 8842b3c88..8961f3ca0 100644
--- a/helgrind/tests/annotate_rwlock.c
+++ b/helgrind/tests/annotate_rwlock.c
@@ -74,7 +74,7 @@ static void rwlock_rdlock(rwlock_t* p)
/* 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 @@ static void rwlock_wrlock(rwlock_t* p)
/* 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 7b3003d53..cfdd89496 100755
--- a/helgrind/tests/filter_stderr
+++ b/helgrind/tests/filter_stderr
@@ -7,6 +7,13 @@ $dir/../../tests/filter_stderr_basic |
# 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 @@ sed \
# 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 000000000..41d1f1ef5
--- /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 282de5c85..6de080af4 100755
--- a/helgrind/tests/filter_xml
+++ b/helgrind/tests/filter_xml
@@ -39,7 +39,8 @@ my %patterns = (
"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 @@ while (<STDIN>) {
# 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 9ec5a8b51..d9af78c0d 100644
--- a/helgrind/tests/hg02_deadlock.stderr.exp
+++ b/helgrind/tests/hg02_deadlock.stderr.exp
@@ -11,36 +11,42 @@ Thread #x was created
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 42ff5aa88..abe74838f 100644
--- a/helgrind/tests/locked_vs_unlocked1_fwd.stderr.exp
+++ b/helgrind/tests/locked_vs_unlocked1_fwd.stderr.exp
@@ -15,7 +15,8 @@ Thread #x was created
----------------------------------------------------------------
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 4eec5624b..5aebd88c7 100644
--- a/helgrind/tests/locked_vs_unlocked1_rev.stderr.exp
+++ b/helgrind/tests/locked_vs_unlocked1_rev.stderr.exp
@@ -15,7 +15,8 @@ Thread #x was created
----------------------------------------------------------------
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 000000000..1135d4ece
--- /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 c2e380e07..45d7853c0 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 000000000..0a2c81323
--- /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 000000000..3aa0dc4e4
--- /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 0fd5cd498..e59809bf8 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 c66b8ec1f..e46a405db 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 dde93e8a1..c3ea44c87 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 bb4932489..a18450b9a 100644
--- a/helgrind/tests/tc09_bad_unlock.stderr.exp
+++ b/helgrind/tests/tc09_bad_unlock.stderr.exp
@@ -6,7 +6,8 @@ Thread #x is the program's root thread
----------------------------------------------------------------
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 was created
----------------------------------------------------------------
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 lock at 0x........ currently held by thread #x
----------------------------------------------------------------
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 unlocked an invalid lock at 0x........
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's call to pthread_mutex_unlock failed
----------------------------------------------------------------
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 unlocked a not-locked lock at 0x........
----------------------------------------------------------------
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 was created
----------------------------------------------------------------
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 lock at 0x........ currently held by thread #x
----------------------------------------------------------------
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 unlocked an invalid lock at 0x........
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 000000000..8baa420c8
--- /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 d09a702ec..c2ec33644 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 0f52b3f09..08e9789dc 100644
--- a/helgrind/tests/tc10_rec_lock.stderr.exp
+++ b/helgrind/tests/tc10_rec_lock.stderr.exp
@@ -13,7 +13,8 @@ Thread #x is the program's root thread
----------------------------------------------------------------
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 unlocked a not-locked lock at 0x........
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 481f91639..30fcceef3 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 3fd64c562..a84428e01 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 @@ int main ( void )
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 361a4d677..76607e042 100644
--- a/helgrind/tests/tc12_rwl_trivial.stderr.exp
+++ b/helgrind/tests/tc12_rwl_trivial.stderr.exp
@@ -8,13 +8,14 @@ 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: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 000000000..7de254993
--- /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 fdcd6446e..d0009d814 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 3e56f251c..d86527077 100644
--- a/helgrind/tests/tc13_laog1.stderr.exp
+++ b/helgrind/tests/tc13_laog1.stderr.exp
@@ -8,19 +8,23 @@ Thread #x is the program's root thread
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 3bf02bf62..da07ff984 100644
--- a/helgrind/tests/tc14_laog_dinphils.stderr.exp
+++ b/helgrind/tests/tc14_laog_dinphils.stderr.exp
@@ -11,13 +11,15 @@ Thread #x was created
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 945010e13..2644e3722 100644
--- a/helgrind/tests/tc15_laog_lockdel.stderr.exp
+++ b/helgrind/tests/tc15_laog_lockdel.stderr.exp
@@ -10,19 +10,23 @@ Thread #x is the program's root thread
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 7b2281649..88a1fe5bb 100644
--- a/helgrind/tests/tc17_sembar.c
+++ b/helgrind/tests/tc17_sembar.c
@@ -104,7 +104,7 @@ gomp_barrier_wait (gomp_barrier_t *bar)
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 @@ static sem_t* my_sem_init (char* identity, int pshared, unsigned count)
{
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 7395251ed..62242f11f 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 @@ int main ( void )
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 95b22e77f..506fa72e4 100644
--- a/helgrind/tests/tc18_semabuse.stderr.exp
+++ b/helgrind/tests/tc18_semabuse.stderr.exp
@@ -24,7 +24,8 @@ Thread #x's call to sem_post failed
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 ce83a9bf6..4e46e5e27 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 @@ Thread #x's call to sem_post failed
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 000000000..2f74eb88a
--- /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 c113ed661..e5fab6af1 100644
--- a/helgrind/tests/tc19_shadowmem.stderr.exp
+++ b/helgrind/tests/tc19_shadowmem.stderr.exp
@@ -3513,9 +3513,6 @@ Locks held: none
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 5d1d8962b..e652d68c5 100644
--- a/helgrind/tests/tc19_shadowmem.stderr.exp-mips32
+++ b/helgrind/tests/tc19_shadowmem.stderr.exp-mips32
@@ -3709,9 +3709,6 @@ Address 0x........ is 0 bytes inside a block of size 100 alloc'd
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 8718d0bba..f71c7f8d4 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 @@ int main ( void )
"\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 @@ int main ( void )
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 @@ int main ( void )
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 4d9f4c4db..d9019d423 100644
--- a/helgrind/tests/tc20_verifywrap.stderr.exp
+++ b/helgrind/tests/tc20_verifywrap.stderr.exp
@@ -14,21 +14,21 @@ Thread #x is the program's root thread
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 @@ 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:83)
+ by 0x........: main (tc20_verifywrap.c:88)
---------------- pthread_mutex_lock et al ----------------
@@ -46,54 +46,61 @@ Thread #x's call to pthread_join failed
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's call to pthread_mutex_unlock failed
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 @@ 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: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 @@ 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: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 @@ 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:165)
+ by 0x........: main (tc20_verifywrap.c:175)
----------------------------------------------------------------
@@ -146,7 +153,7 @@ 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:165)
+ by 0x........: main (tc20_verifywrap.c:175)
---------------- pthread_rwlock_* ----------------
@@ -156,13 +163,14 @@ Thread #x's call to pthread_cond_timedwait failed
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........
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........
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 @@ 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:228)
+ by 0x........: main (tc20_verifywrap.c:248)
FIXME: can't figure out how to verify wrap of sem_destroy
@@ -220,7 +230,7 @@ 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:242)
+ by 0x........: main (tc20_verifywrap.c:262)
----------------------------------------------------------------
@@ -228,7 +238,8 @@ Thread #x's call to sem_post failed
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 7df3fa164..f10967317 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 is the program's root thread
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 @@ 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:83)
+ by 0x........: main (tc20_verifywrap.c:88)
---------------- pthread_mutex_lock et al ----------------
@@ -46,47 +46,53 @@ Thread #x's call to pthread_join failed
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's call to pthread_mutex_unlock failed
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 @@ 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: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 @@ 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: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 @@ 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:165)
+ by 0x........: main (tc20_verifywrap.c:175)
----------------------------------------------------------------
@@ -139,7 +145,7 @@ 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:165)
+ by 0x........: main (tc20_verifywrap.c:175)
---------------- pthread_rwlock_* ----------------
@@ -149,11 +155,12 @@ Thread #x's call to pthread_cond_timedwait failed
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........
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........
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 @@ 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:228)
+ by 0x........: main (tc20_verifywrap.c:243)
FIXME: can't figure out how to verify wrap of sem_destroy
@@ -204,7 +212,7 @@ 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:242)
+ by 0x........: main (tc20_verifywrap.c:257)
----------------------------------------------------------------
@@ -212,7 +220,7 @@ Thread #x's call to sem_post failed
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 000000000..7f4eb21db
--- /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 8628498fc..52f0b27f6 100644
--- a/helgrind/tests/tc20_verifywrap.stderr.exp-mips32
+++ b/helgrind/tests/tc20_verifywrap.stderr.exp-mips32
@@ -15,22 +15,22 @@ Thread #x was created
...
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 @@ 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:83)
+ by 0x........: main (tc20_verifywrap.c:88)
---------------- pthread_mutex_lock et al ----------------
@@ -48,54 +48,61 @@ Thread #x's call to pthread_join failed
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's call to pthread_mutex_unlock failed
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 @@ 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: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 @@ 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: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 @@ 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:165)
+ by 0x........: main (tc20_verifywrap.c:175)
----------------------------------------------------------------
@@ -148,7 +155,7 @@ 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:165)
+ by 0x........: main (tc20_verifywrap.c:175)
---------------- pthread_rwlock_* ----------------
@@ -158,11 +165,12 @@ Thread #x's call to pthread_cond_timedwait failed
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........
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........
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 @@ 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:228)
+ by 0x........: main (tc20_verifywrap.c:243)
FIXME: can't figure out how to verify wrap of sem_destroy
@@ -213,7 +223,7 @@ 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: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 2a445289f..07f8db662 100644
--- a/helgrind/tests/tc20_verifywrap.stderr.exp-mips32-b
+++ b/helgrind/tests/tc20_verifywrap.stderr.exp-mips32-b
@@ -15,22 +15,22 @@ Thread #x was created
...
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 @@ 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:83)
+ by 0x........: main (tc20_verifywrap.c:88)
---------------- pthread_mutex_lock et al ----------------
@@ -48,54 +48,61 @@ Thread #x's call to pthread_join failed
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's call to pthread_mutex_unlock failed
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 @@ 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: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 @@ 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: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 @@ 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:165)
+ by 0x........: main (tc20_verifywrap.c:175)
----------------------------------------------------------------
@@ -148,7 +155,7 @@ 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:165)
+ by 0x........: main (tc20_verifywrap.c:175)
---------------- pthread_rwlock_* ----------------
@@ -158,11 +165,12 @@ Thread #x's call to pthread_cond_timedwait failed
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........
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........
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 @@ 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:228)
+ by 0x........: main (tc20_verifywrap.c:243)
FIXME: can't figure out how to verify wrap of sem_destroy
@@ -213,7 +223,7 @@ 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:242)
+ by 0x........: main (tc20_verifywrap.c:257)
----------------------------------------------------------------
@@ -221,7 +231,7 @@ Thread #x's call to sem_post failed
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 a717d9909..3f60f7945 100644
--- a/helgrind/tests/tc20_verifywrap.stderr.exp-s390x
+++ b/helgrind/tests/tc20_verifywrap.stderr.exp-s390x
@@ -15,22 +15,22 @@ Thread #x was created
...
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 @@ 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:83)
+ by 0x........: main (tc20_verifywrap.c:88)
---------------- pthread_mutex_lock et al ----------------
@@ -48,54 +48,61 @@ Thread #x's call to pthread_join failed
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's call to pthread_mutex_unlock failed
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 @@ 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: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 @@ 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: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 @@ 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:165)
+ by 0x........: main (tc20_verifywrap.c:175)
----------------------------------------------------------------
@@ -148,7 +155,7 @@ 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:165)
+ by 0x........: main (tc20_verifywrap.c:175)
---------------- pthread_rwlock_* ----------------
@@ -158,11 +165,12 @@ Thread #x's call to pthread_cond_timedwait failed
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........
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........
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 @@ 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:228)
+ by 0x........: main (tc20_verifywrap.c:243)
FIXME: can't figure out how to verify wrap of sem_destroy
@@ -213,7 +223,7 @@ 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: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 000000000..921ebf538
--- /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 2accc94f4..0ee9c143d 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 000000000..7c1256e5c
--- /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 6e397683a..0a1b5f365 100644
--- a/helgrind/tests/tc23_bogus_condwait.c
+++ b/helgrind/tests/tc23_bogus_condwait.c
@@ -98,7 +98,7 @@ static sem_t* my_sem_init (char* identity, int pshared, unsigned count)
{
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 5e990f5fd..bcd467ccb 100644
--- a/helgrind/tests/tc24_nonzero_sem.c
+++ b/helgrind/tests/tc24_nonzero_sem.c
@@ -50,7 +50,7 @@ static sem_t* my_sem_init (char* identity, int pshared, unsigned count)
{
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 9e5d2b4f8..ccfcd2778 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -46,6 +46,8 @@ nobase_pkginclude_HEADERS = \
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 @@ nobase_pkginclude_HEADERS = \
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 @@ nobase_pkginclude_HEADERS = \
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 d62bc3438..5dc66cd6d 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 acc05a701..421036789 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 1de80c90c..4a83e357d 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 09b89d7fa..413e22ac2 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 @@ typedef Word PtrdiffT; // 32 64
// 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 struct { UWord uw1; UWord uw2; } UWordPair;
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 @@ typedef UInt ThreadId;
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 @@ typedef
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 @@ typedef
/* ---- 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 Bool sr_isError ( SysRes sr ) {
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 UWord sr_Err ( SysRes sr ) {
}
}
-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 0173e6852..d73c91e93 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 c5f5b84b8..af0fbbf4b 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 94005ca15..b3798e0ac 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 91f375178..49ceffbdf 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 @@ extern Bool VG_(get_datasym_and_offset)( Addr data_addr,
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 @@ typedef
}
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 @@ typedef
}
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 e8f8e559b..a4c1a098c 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 ad1f6b06b..1b9fdfe28 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 39f4a5673..9ce3a2440 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 69e510818..d4c826ba3 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 8b38283ea..2178aca33 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 6fc6822b4..e5c41cc1d 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 @@ typedef struct _VgHashTable VgHashTable;
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 413d6ba17..b606d00bb 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 93a19c874..c22bd77e6 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 3df5be56c..4a7346e76 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 SysRes VG_(poll) (struct vki_pollfd *fds, Int nfds, Int timeout);
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 5d3812740..bda41c247 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 0e2afdccf..cc1f9a87c 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 @@ extern const HChar *VG_(libdir);
// 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 ff01058bf..bb94a59ab 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 8ca9420f2..88770d830 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 1e3117928..4ec31abdc 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 ca69666fe..0217f6757 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 e6dee2370..94ed5442f 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 a52606cf6..0c9799720 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 @@ extern OSet* VG_(OSetGen_EmptyClone) (const OSet* os);
// 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 67c1801de..549569fef 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 657fad60e..208b9dc73 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 @@ void VG_(lookupRangeMap) ( /*OUT*/UWord* key_min, /*OUT*/UWord* key_max,
/*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 f99ffb77e..bac00d7c1 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 bc019f5ea..2ce7ba596 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 61f05cb91..3b0b210f0 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 ad79ec0ed..1bab4787d 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 8e1644dd9..982bfaccf 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 a5df2ce52..57dfbce89 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 ccd5d97dd..7ad176c07 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 3952f2940..8df00b5f3 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)(void(*f)(CorePart part, ThreadId tid,
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 16908b380..fcfc1e0b9 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 2966ce37e..db7b84f32 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 25dc31cb8..ff5df5829 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 860e8d0a4..d6ea52a14 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 1f1c97933..239ae941c 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 e3bc84e9c..2b0fe9930 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 613de06bf..c505f9f9b 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 @@ typedef
); \
} 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 @@ valgrind_do_client_request_expr(uintptr_t _zzq_default, uintptr_t _zzq_request,
#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 @@ typedef
); \
} 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 @@ typedef
"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 @@ typedef
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 @@ typedef
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 @@ typedef
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 @@ VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
#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 61847a711..db85b92d5 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 @@ struct vki_shminfo64 {
#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 031f52858..fe7a17109 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 @@ struct vki_vm86plus_struct {
#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 747d0bf80..df34dd6c0 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 @@ struct vki_shminfo64 {
#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 9e53f25bf..49d0d4c9a 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 @@ typedef uint32_t vki_u32;
#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 @@ typedef uint32_t vki_u32;
#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 @@ struct ByteRangeLockPB2
#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 6db92dc89..0df24ddc3 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 @@ struct vki_ifreq
};
#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 @@ struct vki_sockaddr_rc {
#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 @@ struct vki_xen_privcmd_mmapbatch_v2 {
_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 @@ struct vki_getparent {
//----------------------------------------------------------------------
// 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_sliced_vbi_data {
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 @@ struct vki_v4l2_subdev_mbus_code_enum {
__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 @@ struct vki_v4l2_subdev_frame_size_enum {
__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 @@ struct vki_v4l2_subdev_frame_interval_enum {
__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 @@ struct vki_media_links_enum {
#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 @@ enum vki_kcmp_type {
//----------------------------------------------------------------------
#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 d694f1de0..5f8857f78 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 c95146e93..03b1836c2 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 e0573e01f..e68e214d9 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 7f1642095..59943a8da 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 da33bca54..7df53456c 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 d90d99488..4abe38af7 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 9f446fcc4..4ebd59748 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 29b0018e5..246195b6a 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 c3d17f2f9..afd0a50e8 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 b5ea23889..6de95fc01 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 c95e76845..49996bc06 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 16e74a73d..dedaa67b0 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 6aea179c8..70c2835ee 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 @@ struct vki_termios {
//#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 8848b0576..b4106637b 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 @@ struct vki_shminfo64 {
#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 85c449d4e..c3f6d0047 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 @@ typedef struct
#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 @@ struct vki_shminfo64 {
#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 c21121930..820cd021d 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 e186a6201..df3572965 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 f8f08f736..f70a2edb8 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 60b569eb6..b75cdce7d 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 a382a5561..5103b43a0 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 2a8081e80..79cc5537a 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 006f48e64..644ac8a32 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 cfc2cc6b0..2a2016104 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 d0a62c62a..2a4a8f1fe 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 000000000..d6fe22ce3
--- /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 3a780301a..cc248b2ef 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 eee596488..5479b3e24 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 000000000..d126b3339
--- /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 000000000..cc3b9d975
--- /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 9b0b99b9c..d243a8541 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 c34e02740..345b8a4a4 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 @@ struct vki_vm86plus_struct {
#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 b5037f202..d381ee6cb 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 @@ struct vki_xen_domctl_getdomaininfo_00000009 {
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 @@ struct vki_xen_domctl_getpageframeinfo3 {
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 @@ struct vki_xen_domctl_scheduler_op {
#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 vki_xen_domctl_scheduler_op {
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 @@ struct vki_xen_domctl_max_vcpus {
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 @@ struct vki_xen_domctl_tsc_info {
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 @@ struct vki_xen_domctl_address_size {
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 @@ struct vki_xen_domctl_cacheflush {
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 {
//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 {
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 {
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 @@ struct vki_xen_domctl {
#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 e7a331041..d8ff600a2 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 97ca6d8fe..11c4219f6 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 f26e03911..0664b73de 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 @@ struct vki_xen_hvm_param {
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 @@ struct vki_xen_hvm_set_pci_link_route {
};
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 2690c60c2..c3076902d 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 e6f06f709..5e758b391 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/coregrind/pub_core_debugger.h b/include/vki/vki-xen-physdev.h
index a3ac809c8..d3111a091 100644
--- a/coregrind/pub_core_debugger.h
+++ b/include/vki/vki-xen-physdev.h
@@ -1,14 +1,8 @@
-
-/*--------------------------------------------------------------------*/
-/*--- 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
+ 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
@@ -28,19 +22,45 @@
The GNU General Public License is contained in the file COPYING.
*/
-#ifndef __PUB_CORE_DEBUGGER_H
-#define __PUB_CORE_DEBUGGER_H
+/* 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
-//--------------------------------------------------------------------
-// PURPOSE: This simple module just deals with attaching a debugger to the
-// running program.
-//--------------------------------------------------------------------
+#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
-#include "pub_core_basics.h" // ThreadId
+#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;
+};
-extern void VG_(start_debugger) ( ThreadId tid );
+#define VKI_XEN_PHYSDEVOP_unmap_pirq 14
+struct vki_xen_physdev_unmap_pirq {
+ vki_xen_domid_t domid;
+ /* IN */
+ int pirq;
+};
-#endif // __PUB_CORE_DEBUGGER_H
+#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 000000000..30f8a33a5
--- /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 1621b7abe..8f4eac124 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 @@ struct vki_xen_sysctl_getdomaininfolist_0000000a {
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 @@ struct vki_xen_sysctl_physinfo_0000000a {
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 ab402f09c..e372ae6d8 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 6c6cae0fe..a022c94dc 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 a2d0fb22a..a54a4de9a 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 000000000..b8eb50db3
--- /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 e2f3d817b..924a1e9c9 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 @@ struct vki_xenctl_bitmap {
#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 bbd4983f9..bc0f63a58 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 @@ static void lk_pre_clo_init(void)
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 5053c4f0a..e55a774b7 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 @@ static void VERB_snapshot(Int verbosity, const HChar* prefix, Int i)
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 @@ void* realloc_block ( ThreadId tid, void* p_old, SizeT new_req_szB )
}
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 void update_stack_stats(SSizeT stack_szB_delta)
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 new_mem_stack_2(SizeT len, const HChar* what)
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 @@ static void pp_snapshot_SXPt(VgFile *fp, SXPt* sxpt, Int depth,
}
// 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 @@ static void ms_print_stats (void)
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 @@ static void ms_pre_clo_init(void)
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 6fa366986..e6fae89e7 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 @@ usage: ms_print [options] massif-out-file
--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 5f159c3ab..745b521ea 100755
--- a/massif/tests/filter_verbose
+++ b/massif/tests/filter_verbose
@@ -7,6 +7,9 @@ dir=`dirname $0`
$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 1a8b8636c..0182e6c51 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 7d84dc560..b54b721a4 100644
--- a/memcheck/docs/mc-manual.xml
+++ b/memcheck/docs/mc-manual.xml
@@ -811,7 +811,7 @@ is <option>--errors-for-leak-kinds=definite,possible</option>
<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 @@ is <option>--errors-for-leak-kinds=definite,possible</option>
<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 @@ is <option>--errors-for-leak-kinds=definite,possible</option>
<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 @@ built-in gdbserver (see <xref linkend="manual-core-adv.gdbserver-commandhandling
<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>
+ 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>
- 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 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 @@ $10 = 0x0
</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 @@ Address 0x8049E28 len 1 defined
</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 @@ Address 0x8049E28 len 1 defined
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 5781b8026..6b763f124 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 @@ static void pp_LossRecord(UInt n_this_record, UInt n_total_records,
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 @@ void MC_(pp_Error) ( const Error* err )
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 @@ void MC_(pp_Error) ( const Error* err )
} 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 @@ void MC_(pp_Error) ( const Error* err )
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 @@ void MC_(pp_Error) ( const Error* err )
&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 @@ typedef
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 @@ Bool MC_(is_recognised_suppression) ( const HChar* name, Supp* su )
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 @@ Bool MC_(is_recognised_suppression) ( const HChar* name, Supp* su )
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 @@ Bool MC_(error_matches_suppression) ( const Error* err, const Supp* su )
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 @@ Bool MC_(error_matches_suppression) ( const Error* err, const Supp* su )
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 @@ const HChar* MC_(get_error_name) ( const Error* err )
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 @@ const HChar* MC_(get_error_name) ( const Error* err )
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 f50a07940..663cdcaa9 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 @@ IRType MC_(get_otrack_reg_array_equiv_int_type) ( IRRegArray* arr );
/* 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];
-
-# 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); \
+
+/* 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
+};
+
+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 @@ extern UInt MC_(leak_search_gen);
// 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 @@ typedef
#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 @@ extern Int MC_(clo_mc_level);
/* 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 791a5c1b4..d1d1f2398 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 find_chunk_for_OLD ( Addr ptr,
{
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 @@ static Bool is_valid_aligned_ULong ( Addr a )
&& 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 @@ static LeakCheckHeuristic heuristic_reachedness (Addr ptr,
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 @@ static LeakCheckHeuristic heuristic_reachedness (Addr ptr,
// ??? 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 @@ static LeakCheckHeuristic heuristic_reachedness (Addr ptr,
&& 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 @@ static LeakCheckHeuristic heuristic_reachedness (Addr ptr,
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 @@ static LeakCheckHeuristic heuristic_reachedness (Addr ptr,
&& 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 @@ lc_push_with_clique_if_a_chunk_ptr(Addr ptr, Int clique, Int cur_clique)
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 @@ lc_push_if_a_chunk_ptr(Addr ptr,
}
-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 @@ void scan_all_valid_memory_catcher ( Int sigNo, Addr addr )
// 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 @@ lc_scan_memory(Addr start, SizeT len, Bool is_prior_definite,
#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 @@ lc_scan_memory(Addr start, SizeT len, Bool is_prior_definite,
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 @@ lc_scan_memory(Addr start, SizeT len, Bool is_prior_definite,
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 @@ static Int cmp_LossRecords(const void* va, const void* vb)
// 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 @@ static void print_results(ThreadId tid, LeakCheckParams* lcp)
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 @@ static void print_results(ThreadId tid, LeakCheckParams* lcp)
}
// 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 @@ static void print_clique (Int clique, UInt level)
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 @@ Bool MC_(print_block_list) ( UInt loss_record_nr)
}
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];
-
- // (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; 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);
+ 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;
+ }
+
+ // 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);
+
+ 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 @@ void MC_(detect_memory_leaks) ( ThreadId tid, LeakCheckParams* lcp)
tl_assert(ex->state == Unreached);
}
}
-
+
print_results( tid, lcp);
VG_(free) ( lc_markstack );
@@ -1875,11 +1969,11 @@ search_address_in_GP_reg(ThreadId tid, const HChar* regname, Addr addr_in_reg)
&& 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 60d5079d5..91fab009c 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 1fc156151..65fdfcb0d 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 @@ static void ocache_sarp_Clear_Origins ( Addr, UWord ); /* fwds */
#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 @@ static Bool modify_ignore_ranges ( Bool addRange, Addr start, Addr len )
(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 @@ void mc_LOADV_128_or_256_slow ( /*OUT*/ULong* res,
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 @@ void mc_LOADV_128_or_256_slow ( /*OUT*/ULong* res,
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 @@ ULong mc_LOADVn_slow ( Addr a, SizeT nBits, Bool bigendian )
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 @@ void mc_STOREVn_slow ( Addr a, SizeT nBits, ULong vbytes, Bool bigendian )
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 @@ void mc_STOREVn_slow ( Addr a, SizeT nBits, ULong vbytes, Bool bigendian )
/* 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 @@ static void set_address_range_perms ( Addr a, SizeT lenT, UWord vabits16,
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 @@ static void set_address_range_perms ( Addr a, SizeT lenT, UWord vabits16,
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 @@ static void set_address_range_perms ( Addr a, SizeT lenT, UWord vabits16,
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 @@ static void set_address_range_perms ( Addr a, SizeT lenT, UWord vabits16,
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 @@ static void set_address_range_perms ( Addr a, SizeT lenT, UWord vabits16,
// 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 @@ static void set_address_range_perms ( Addr a, SizeT lenT, UWord vabits16,
// 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 @@ static void set_address_range_perms ( Addr a, SizeT lenT, UWord vabits16,
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 @@ static void set_address_range_perms ( Addr a, SizeT lenT, UWord vabits16,
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 @@ static void set_address_range_perms ( Addr a, SizeT lenT, UWord vabits16,
// 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 @@ static void set_address_range_perms ( Addr a, SizeT lenT, UWord vabits16,
// 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 @@ static void set_address_range_perms ( Addr a, SizeT lenT, UWord vabits16,
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 @@ void MC_(make_mem_noaccess) ( Addr a, SizeT len )
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_new_mem_w_tid_no_ECU ( Addr a, SizeT len, ThreadId tid )
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 @@ void MC_(copy_address_range_state) ( Addr src, Addr dst, SizeT len )
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 @@ void MC_(copy_address_range_state) ( Addr src, Addr dst, SizeT len )
/* 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 @@ void MC_(copy_address_range_state) ( Addr src, Addr dst, SizeT len )
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 @@ void MC_(copy_address_range_state) ( Addr src, Addr dst, SizeT len )
* 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 set_aligned_word64_Origin_to_undef ( Addr a, UInt otag )
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 @@ static INLINE void make_aligned_word32_undefined ( Addr a )
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 @@ void make_aligned_word32_undefined_w_otag ( Addr a, UInt otag )
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 @@ void make_aligned_word32_noaccess ( Addr a )
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 @@ void make_aligned_word32_noaccess ( Addr a )
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 @@ static INLINE void make_aligned_word64_undefined ( Addr a )
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 @@ void make_aligned_word64_undefined_w_otag ( Addr a, UInt otag )
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 @@ void make_aligned_word64_noaccess ( Addr a )
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 @@ MAYBE_USED
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 @@ static void VG_REGPARM(2) mc_new_mem_stack_4_w_ECU(Addr new_SP, UInt ecu)
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 @@ static void VG_REGPARM(1) mc_new_mem_stack_4(Addr new_SP)
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 @@ MAYBE_USED
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 @@ static void VG_REGPARM(2) mc_new_mem_stack_8_w_ECU(Addr new_SP, UInt ecu)
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 @@ static void VG_REGPARM(1) mc_new_mem_stack_8(Addr new_SP)
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 @@ MAYBE_USED
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 @@ static void VG_REGPARM(2) mc_new_mem_stack_12_w_ECU(Addr new_SP, UInt ecu)
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 @@ static void VG_REGPARM(1) mc_new_mem_stack_12(Addr new_SP)
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 @@ MAYBE_USED
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 @@ static void VG_REGPARM(2) mc_new_mem_stack_16_w_ECU(Addr new_SP, UInt ecu)
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 @@ static void VG_REGPARM(1) mc_new_mem_stack_16(Addr new_SP)
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 @@ MAYBE_USED
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 @@ static void VG_REGPARM(2) mc_new_mem_stack_32_w_ECU(Addr new_SP, UInt ecu)
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 @@ static void VG_REGPARM(1) mc_new_mem_stack_32(Addr new_SP)
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 @@ MAYBE_USED
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 @@ static void VG_REGPARM(2) mc_new_mem_stack_112_w_ECU(Addr new_SP, UInt ecu)
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 @@ static void VG_REGPARM(1) mc_new_mem_stack_112(Addr new_SP)
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 @@ MAYBE_USED
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 @@ static void VG_REGPARM(2) mc_new_mem_stack_128_w_ECU(Addr new_SP, UInt ecu)
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 @@ static void VG_REGPARM(1) mc_new_mem_stack_128(Addr new_SP)
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 @@ MAYBE_USED
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 @@ static void VG_REGPARM(2) mc_new_mem_stack_144_w_ECU(Addr new_SP, UInt ecu)
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 @@ static void VG_REGPARM(1) mc_new_mem_stack_144(Addr new_SP)
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 @@ MAYBE_USED
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 @@ static void VG_REGPARM(2) mc_new_mem_stack_160_w_ECU(Addr new_SP, UInt ecu)
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 @@ static void VG_REGPARM(1) mc_new_mem_stack_160(Addr new_SP)
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 VG_REGPARM(1) mc_die_mem_stack_160(Addr new_SP)
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 @@ Bool MC_(check_mem_is_noaccess) ( Addr a, SizeT len, Addr* bad_addr )
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 @@ static Bool is_mem_addressable ( Addr a, SizeT len,
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 @@ static MC_ReadResult is_mem_defined ( Addr a, SizeT len,
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 @@ static void is_mem_defined_comprehensive (
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 @@ static Bool mc_is_defined_asciiz ( Addr a, Addr* bad_addr, UInt* otag )
{
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 @@ static void mc_pre_reg_read ( CorePart part, ThreadId tid, const HChar* s,
/*------------------------------------------------------------*/
+/*--- 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 @@ static void mc_pre_reg_read ( CorePart part, ThreadId tid, const HChar* s,
= 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 @@ void mc_LOADV_128_or_256 ( /*OUT*/ULong* res,
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 @@ void mc_LOADV_128_or_256 ( /*OUT*/ULong* res,
} 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 @@ VG_REGPARM(2) void MC_(helperc_LOADV128le) ( /*OUT*/V128* res, Addr a )
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 @@ ULong mc_LOADV64 ( Addr a, Bool isBigEndian )
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 @@ ULong mc_LOADV64 ( Addr a, Bool isBigEndian )
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 @@ void mc_STOREV64 ( Addr a, ULong vbits64, Bool isBigEndian )
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 @@ void mc_STOREV64 ( Addr a, ULong vbits64, Bool isBigEndian )
((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 @@ void mc_STOREV64 ( Addr a, ULong vbits64, Bool isBigEndian )
((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 @@ VG_REGPARM(1) void MC_(helperc_STOREV64le) ( Addr a, ULong vbits64 )
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 @@ UWord mc_LOADV32 ( Addr a, Bool isBigEndian )
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 @@ UWord mc_LOADV32 ( Addr a, Bool isBigEndian )
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 @@ void mc_STOREV32 ( Addr a, UWord vbits32, Bool isBigEndian )
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 @@ void mc_STOREV32 ( Addr a, UWord vbits32, Bool isBigEndian )
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 @@ void mc_STOREV32 ( Addr a, UWord vbits32, Bool isBigEndian )
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 @@ VG_REGPARM(2) void MC_(helperc_STOREV32le) ( Addr a, UWord vbits32 )
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 @@ UWord mc_LOADV16 ( Addr a, Bool isBigEndian )
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 @@ UWord mc_LOADV16 ( Addr a, Bool isBigEndian )
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 @@ UWord mc_LOADV16 ( Addr a, Bool isBigEndian )
#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 @@ Bool accessible_vabits4_in_vabits8 ( Addr a, UChar vabits8 )
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 @@ void mc_STOREV16 ( Addr a, UWord vbits16, Bool isBigEndian )
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 @@ void mc_STOREV16 ( Addr a, UWord vbits16, Bool isBigEndian )
&(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 @@ void mc_STOREV16 ( Addr a, UWord vbits16, Bool isBigEndian )
&(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 @@ VG_REGPARM(2) void MC_(helperc_STOREV16le) ( Addr a, UWord vbits16 )
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 @@ UWord MC_(helperc_LOADV8) ( Addr a )
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 @@ UWord MC_(helperc_LOADV8) ( Addr a )
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 @@ void MC_(helperc_STOREV8) ( Addr a, UWord vbits8 )
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 @@ void MC_(helperc_STOREV8) ( Addr a, UWord vbits8 )
&(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 @@ void MC_(helperc_STOREV8) ( Addr a, UWord vbits8 )
&(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 void init_shadow_memory ( void )
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 @@ static Bool mc_expensive_sanity_check ( void )
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 @@ static Bool mc_expensive_sanity_check ( void )
/*--- 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 @@ static Bool mc_process_cmd_line_options(const HChar* arg)
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 @@ static Bool mc_process_cmd_line_options(const HChar* arg)
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 @@ static Bool mc_process_cmd_line_options(const HChar* arg)
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 Bool mc_process_cmd_line_options(const HChar* arg)
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 @@ static void mc_print_usage(void)
" 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 @@ static void mc_print_usage(void)
" 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 @@ static void mc_print_usage(void)
" --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 @@ static void print_monitor_help ( void )
(
"\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 @@ static void print_monitor_help ( void )
" 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 @@ static void print_monitor_help ( void )
"\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 @@ static Bool handle_gdb_monitor_command (ThreadId tid, HChar *req)
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 @@ static Bool handle_gdb_monitor_command (ThreadId tid, HChar *req)
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 @@ static Bool handle_gdb_monitor_command (ThreadId tid, HChar *req)
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 @@ static Bool handle_gdb_monitor_command (ThreadId tid, HChar *req)
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 @@ static Bool handle_gdb_monitor_command (ThreadId tid, HChar *req)
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 @@ static Bool handle_gdb_monitor_command (ThreadId tid, HChar *req)
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 @@ static Bool handle_gdb_monitor_command (ThreadId tid, HChar *req)
}
}
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 @@ static Bool handle_gdb_monitor_command (ThreadId tid, HChar *req)
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 @@ static Bool handle_gdb_monitor_command (ThreadId tid, HChar *req)
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 @@ static Bool mc_handle_client_request ( ThreadId tid, UWord* arg, UWord* ret )
#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 @@ static void mc_post_clo_init ( void )
// 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 mc_post_clo_init ( void )
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 @@ static void mc_print_stats (void)
" 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 @@ static void mc_print_stats (void)
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 @@ static void mc_print_stats (void)
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 @@ static void mc_print_stats (void)
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 @@ static void mc_fini ( Int exitcode )
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 @@ static void mc_fini ( Int exitcode )
"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 @@ static void mc_pre_clo_init(void)
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 @@ static void mc_pre_clo_init(void)
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 630c9c7e1..08fcc2d59 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 @@ void MC_(create_mempool)(Addr pool, UInt rzB, Bool is_zeroed)
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 @@ check_mempool_sane(MC_Mempool* mp)
}
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 @@ check_mempool_sane(MC_Mempool* mp)
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 @@ check_mempool_sane(MC_Mempool* mp)
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 @@ check_mempool_sane(MC_Mempool* mp)
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 @@ void MC_(mempool_alloc)(ThreadId tid, Addr pool, Addr addr, SizeT szB)
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 @@ void MC_(mempool_free)(Addr pool, Addr addr)
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 @@ void MC_(mempool_trim)(Addr pool, Addr addr, SizeT szB)
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 @@ void MC_(mempool_change)(Addr pool, Addr addrA, Addr addrB, SizeT szB)
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 df0b22c12..2fddc90a4 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 892b43b3b..4358d2e8b 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 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce,
/* 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 @@ IRAtom* expr2vbits_Load_WRK ( MCEnv* mce,
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 @@ static void do_shadow_LoadG ( MCEnv* mce, IRLoadG* lg )
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 @@ IRSB* MC_(instrument) ( VgCallbackClosure* closure,
IRType gWordTy, IRType hWordTy )
{
Bool verboze = 0||False;
- Bool bogus;
Int i, j, first_stmt;
IRStmt* st;
MCEnv mce;
@@ -6313,33 +6317,36 @@ IRSB* MC_(instrument) ( VgCallbackClosure* closure,
}
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. */
-
- bogus = False;
-
- 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 (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;
+
+ 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) 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 @@ static IRAtom* gen_guarded_load_b ( MCEnv* mce, Int szB,
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 @@ static void do_origins_LoadG ( MCEnv* mce, IRLoadG* lg )
{
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 2740578f1..811930e3b 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 f17716761..68d9ca16e 100644
--- a/memcheck/tests/Makefile.am
+++ b/memcheck/tests/Makefile.am
@@ -27,6 +27,9 @@ endif
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 @@ endif
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 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 @@ check_PROGRAMS = \
buflen_check \
bug155125 \
bug287260 \
+ bug340392 \
calloc-overflow \
client-msg \
clientperm \
@@ -323,7 +336,6 @@ check_PROGRAMS = \
leak-pool \
leak-tree \
leak-segv-jmp \
- long_namespace_xml \
long-supps \
mallinfo \
malloc_free_fill \
@@ -365,6 +377,11 @@ check_PROGRAMS = \
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 @@ else
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 @@ fprw_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@
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 @@ long_namespace_xml_SOURCES = long_namespace_xml.cpp
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 @@ origin6_fp_CFLAGS = $(AM_CFLAGS) -O
# 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 @@ else
-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 cdb1a6c45..97955f914 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 000000000..4d0ea14e4
--- /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 000000000..08f834792
--- /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 000000000..46c87312a
--- /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 000000000..2c3bf1d0a
--- /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 000000000..8a3955d58
--- /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 000000000..d955118d7
--- /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 000000000..d17f7a3dc
--- /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 000000000..199db7a91
--- /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 000000000..df56f5874
--- /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 000000000..b67f039c6
--- /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_nointerp2.stderr.exp b/memcheck/tests/amd64-solaris/context_rflags.stderr.exp
index e69de29bb..e69de29bb 100644
--- a/none/tests/scripts/shell_nointerp2.stderr.exp
+++ b/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 000000000..8ad7bacd2
--- /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 000000000..506f6a321
--- /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 000000000..9afceca1d
--- /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 000000000..5b94f9c69
--- /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_nointerp3.stderr.exp b/memcheck/tests/amd64-solaris/context_rflags2.stdout.exp
index e69de29bb..e69de29bb 100644
--- a/none/tests/scripts/shell_nointerp3.stderr.exp
+++ b/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 000000000..e42f53f68
--- /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 000000000..f1e381b90
--- /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 000000000..bee96caaa
--- /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 000000000..2cefcc88b
--- /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 000000000..97d6be1c5
--- /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 000000000..a778e971f
--- /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 000000000..9b6bdc2ec
--- /dev/null
+++ b/memcheck/tests/amd64-solaris/ldsoexec.c
@@ -0,0 +1,3 @@
+int main(void) {
+ return 0;
+}
diff --git a/memcheck/tests/amd64-solaris/ldsoexec.stderr.exp b/memcheck/tests/amd64-solaris/ldsoexec.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..7f6160cb0
--- /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 0e72521fc..dc48f417c 100644
--- a/memcheck/tests/amd64/Makefile.am
+++ b/memcheck/tests/amd64/Makefile.am
@@ -32,7 +32,8 @@ EXTRA_DIST = \
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 @@ check_PROGRAMS = \
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_CFLAGS += @FLAG_M64@
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 a010b042b..57624a1c2 100644
--- a/memcheck/tests/amd64/bt_everything.c
+++ b/memcheck/tests/amd64/bt_everything.c
@@ -13,6 +13,18 @@ typedef signed short Short;
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 @@ int main ( void )
/* 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 @@ int main ( void )
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 f22a0a77c..370553f3a 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 de0403763..bd214c187 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 @@ const unsigned int vecZ[4]
__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 @@ void do_fxsave ( void* p, int rexw ) {
__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 000000000..9a3238953
--- /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 000000000..4d15d11b9
--- /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/memcheck/tests/amd64/xsave-avx.stdout.exp b/memcheck/tests/amd64/xsave-avx.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..0b2793a71
--- /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 7e09af52e..2085a30d9 100644
--- a/memcheck/tests/badjump2.c
+++ b/memcheck/tests/badjump2.c
@@ -24,7 +24,7 @@ int main(void)
/* 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 3c4c7286f..d0fd803a6 100644
--- a/memcheck/tests/big_blocks_freed_list.stderr.exp
+++ b/memcheck/tests/big_blocks_freed_list.stderr.exp
@@ -4,12 +4,18 @@ Invalid read of size 1
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 @@ Invalid read of size 1
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 000000000..c95bdf937
--- /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/memcheck/tests/bug340392.stderr.exp b/memcheck/tests/bug340392.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/memcheck/tests/bug340392.stderr.exp
diff --git a/memcheck/tests/bug340392.vgtest b/memcheck/tests/bug340392.vgtest
new file mode 100644
index 000000000..0ae8eab5e
--- /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 5733ffae1..78bd119fd 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 @@ int main()
__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 acc0bfe04..5c83e2689 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 2ccf00c4a..fbb8181a7 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 9c7fa4106..047275632 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 87e72143a..8e282926f 100644
--- a/memcheck/tests/darwin/aio.c
+++ b/memcheck/tests/darwin/aio.c
@@ -14,6 +14,7 @@ int main(void)
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 fd7bbf9f8..71222a957 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 5b8a3fb21..af4def4d3 100644
--- a/memcheck/tests/darwin/scalar.c
+++ b/memcheck/tests/darwin/scalar.c
@@ -589,7 +589,9 @@ int main(void)
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 6278d2522..56fd999af 100644
--- a/memcheck/tests/darwin/scalar.stderr.exp
+++ b/memcheck/tests/darwin/scalar.stderr.exp
@@ -9,18 +9,23 @@ x2000003(3): __NR_read 1+3s 1m
-----------------------------------------------------
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 @@ x2000004(4): __NR_write 3s 1m
-----------------------------------------------------
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 @@ x2000005(5): __NR_open (2-args) 2s 1m
-----------------------------------------------------
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 @@ x2000007(7): __NR_wait4 4s 2m
-----------------------------------------------------
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 @@ x2000009(9): __NR_link 2s 2m
-----------------------------------------------------
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 @@ x200000a(10): __NR_unlink 1s 1m
-----------------------------------------------------
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 @@ x200000c(12): __NR_chdir 1s 1m
-----------------------------------------------------
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 @@ x200000e(14): __NR_mknod 3s 1m
-----------------------------------------------------
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 @@ x200000f(15): __NR_chmod 2s 1m
-----------------------------------------------------
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 @@ x2000010(16): __NR_chown 3s 1m
-----------------------------------------------------
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 @@ x2000012(18): __NR_getfsstat 3s 1m
-----------------------------------------------------
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 @@ x200004e(78): __NR_mincore 3s 1m
-----------------------------------------------------
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 @@ x2000052(82): __NR_setpgid 2s 0m
-----------------------------------------------------
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 @@ x2000069(105): __NR_setsockopt 5s 1m
-----------------------------------------------------
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 @@ x2000076(118): __NR_getsockopt 5s 1m
-----------------------------------------------------
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 @@ x2000084(132): __NR_mkfifo 2s 1m
-----------------------------------------------------
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 @@ x20000a7(167): __NR_mount 4s 2m
-----------------------------------------------------
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 @@ x20000a9(169): __NR_csops 4s 1m
-----------------------------------------------------
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 @@ x20000df(223): __NR_exchangedata 3s 2m
-----------------------------------------------------
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 @@ x2000106(262): __NR_shmat 3s 0m
-----------------------------------------------------
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 @@ x2000109(265): __NR_shmget 3s 0m
-----------------------------------------------------
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 @@ x200010e(270): __NR_sem_unlink 1s 1m
-----------------------------------------------------
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 @@ Syscall param sem_post(sem) contains uninitialised byte(s)
-----------------------------------------------------
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 @@ x2000114(276): __NR_sem_destroy 1s 1m
-----------------------------------------------------
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 @@ x2000117(279): __NR_stat_extended 4s 4m
-----------------------------------------------------
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 @@ x2000118(280): __NR_lstat_extended 4s 4m
-----------------------------------------------------
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 @@ x2000119(280): __NR_fstat_extended 4s 3m
-----------------------------------------------------
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 @@ x200011c(284):__NR_access_extended 4s 1m
-----------------------------------------------------
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 @@ x200013b(315): __NR_aio_suspend 1s 0m
-----------------------------------------------------
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 @@ x200013e(318): __NR_aio_read 1s 1m
-----------------------------------------------------
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 @@ x200013f(319): __NR_aio_write 1s 1m
-----------------------------------------------------
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 @@ x2000148(328): __NR___pthread_kill 2s 0m
-----------------------------------------------------
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 @@ x2000155(341):__NR_stat64_extended 4s 4m
-----------------------------------------------------
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 @@ x2000156(342):__NR_lstat64_extended 4s 4m
-----------------------------------------------------
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 @@ x2000157(342):__NR_fstat64_extended 4s 3m
-----------------------------------------------------
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 @@ x200015b(347): __NR_getfsstat64 3s 1m
-----------------------------------------------------
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 @@ Syscall param getfsstat64(buf) points to unaddressable byte(s)
-----------------------------------------------------
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 ebeccf935..a3fd1dfad 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 2124517f1..6e7467d7c 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 f6ae038b1..b65b6d342 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 9ed5375c7..7560e3a77 100644
--- a/memcheck/tests/doublefree.stderr.exp
+++ b/memcheck/tests/doublefree.stderr.exp
@@ -4,4 +4,7 @@ Invalid free() / delete / delete[] / realloc()
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 574f97c71..7d981b69b 100644
--- a/memcheck/tests/dw4.c
+++ b/memcheck/tests/dw4.c
@@ -68,8 +68,8 @@ int main ( void )
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 000000000..917dcb57e
--- /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 8762bf1d4..02bf2599d 100644
--- a/memcheck/tests/err_disable1.stderr.exp
+++ b/memcheck/tests/err_disable1.stderr.exp
@@ -10,6 +10,9 @@ Invalid read of size 1
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 @@ Invalid read of size 1
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 @@ Invalid read of size 1
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 @@ Invalid read of size 1
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 82cd04f44..7146da7a0 100644
--- a/memcheck/tests/err_disable2.stderr.exp
+++ b/memcheck/tests/err_disable2.stderr.exp
@@ -7,6 +7,9 @@ Invalid read of size 1
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 0f1f8b770..2b6d74d6e 100644
--- a/memcheck/tests/err_disable3.stderr.exp
+++ b/memcheck/tests/err_disable3.stderr.exp
@@ -15,6 +15,9 @@ Invalid read of size 1
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 @@ Invalid read of size 1
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 cfacfd783..acc01ad82 100644
--- a/memcheck/tests/err_disable4.stderr.exp
+++ b/memcheck/tests/err_disable4.stderr.exp
@@ -1506,6 +1506,9 @@ Invalid read of size 1
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 8e979d2c7..35257d16c 100644
--- a/memcheck/tests/err_disable_arange1.stderr.exp
+++ b/memcheck/tests/err_disable_arange1.stderr.exp
@@ -6,6 +6,9 @@ Invalid write of size 4
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 @@ Invalid write of size 4
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: exiting program has the following client-requested
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 48ba25f3e..a43770996 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 b3d44ecdc..a5d80f11f 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 b87bff8f4..cd98593f7 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 d99f6b5a2..35f2995e1 100644
--- a/memcheck/tests/file_locking.c
+++ b/memcheck/tests/file_locking.c
@@ -81,8 +81,8 @@ int main(int argc, char *argv[])
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 6eb304d2f..4ef74c720 100644
--- a/memcheck/tests/fprw.c
+++ b/memcheck/tests/fprw.c
@@ -10,7 +10,7 @@ int main ( void )
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 6dfbf0cb4..4179391b1 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 50ad27b02..1d1f84ca7 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 @@ asm(
" ret\n"
".previous\n"
);
+
#elif defined(VGP_amd64_linux)
extern UWord do_syscall_WRK (
UWord syscall_no,
@@ -104,6 +107,7 @@ asm(
" bx lr\n"
".previous\n"
);
+
#elif defined(VGP_s390x_linux)
UWord do_syscall_WRK (
UWord syscall_no,
@@ -184,6 +188,51 @@ extern UWord do_syscall_WRK (
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 @@ UWord do_syscall_WRK (UWord syscall_no,
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 @@ void f(void)
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 @@ void f(void)
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 73f4e1188..1ee37cdf8 100644
--- a/memcheck/tests/leak-segv-jmp.stderr.exp
+++ b/memcheck/tests/leak-segv-jmp.stderr.exp
@@ -14,8 +14,8 @@ To see them, rerun with: --leak-check=full --show-leak-kinds=all
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 @@ mprotect result 0
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 @@ full mprotect result 0
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 @@ LEAK SUMMARY:
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 43cd6d004..52dae9145 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 f599eaea4..f66fc8946 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 @@ void doit(void)
// 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 8531c4ecc..3228f7483 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 8a025a965..7a862a3cc 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 8a69bceef..1bd6ef00f 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 4d337b03c..d364076ea 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 91bdeafa5..fb8a3dd32 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 @@ namespace N1 {
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 b440a8380..bbf804122 100644
--- a/memcheck/tests/malloc1.stderr.exp
+++ b/memcheck/tests/malloc1.stderr.exp
@@ -5,6 +5,10 @@ Invalid write of size 1
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 44cc7bb3d..496fdff15 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 @@ int main ( int argc, char** argv )
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 7ba042699..36fb84823 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 b036b1070..78ab8f138 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 aa8d58833..e9dc1afe5 100644
--- a/memcheck/tests/memalign_test.stderr.exp
+++ b/memcheck/tests/memalign_test.stderr.exp
@@ -4,4 +4,8 @@ Invalid free() / delete / delete[] / realloc()
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 2f583438b..675fc643d 100644
--- a/memcheck/tests/noisy_child.stderr.exp
+++ b/memcheck/tests/noisy_child.stderr.exp
@@ -4,6 +4,9 @@ Invalid write of size 1
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 @@ Invalid write of size 1
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 871f6512b..fdb4a338e 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 @@ HEAP SUMMARY:
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 8873a2542..a57d9aa0d 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 @@ HEAP SUMMARY:
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 b1c6b27c4..a95bb6289 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 d4003a77d..0c9caa108 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 cc473503e..6655ab498 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 9a4378503..fa34a1e15 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 63ba88f5d..fa34a1e15 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 16a9e6af7..545fe3d0d 100644
--- a/memcheck/tests/sbfragment.c
+++ b/memcheck/tests/sbfragment.c
@@ -75,7 +75,7 @@ int main(int argc, char *argv[])
}
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 bd005c86a..cbbe181b4 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 3a6d15699..397a57996 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 000000000..f00e76e40
--- /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 5e4361c39..ae82248ae 100644
--- a/memcheck/tests/sh-mem-random.c
+++ b/memcheck/tests/sh-mem-random.c
@@ -102,7 +102,10 @@ static inline U1 randomU1 ( void )
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 @@ void do_test_at ( U1* arr )
"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 526a99aa5..2892ebbe9 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 @@ int main(int argv, char** argc) {
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 000000000..de4a860bc
--- /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 000000000..458276983
--- /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 000000000..4ec6bf52c
--- /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 000000000..3e981d510
--- /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/memcheck/tests/solaris/brk.stdout.exp b/memcheck/tests/solaris/brk.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..1306b7786
--- /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 000000000..8673a9155
--- /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 000000000..556123ed4
--- /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/memcheck/tests/solaris/context_stack_die.stdout.exp b/memcheck/tests/solaris/context_stack_die.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..f5c86045a
--- /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 000000000..85209f062
--- /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/memcheck/tests/solaris/door_data.stderr.exp b/memcheck/tests/solaris/door_data.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..0d0ccc3cc
--- /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 000000000..bf93b3618
--- /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 000000000..06874c075
--- /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/memcheck/tests/solaris/door_kill.stderr.exp b/memcheck/tests/solaris/door_kill.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..a49633f3f
--- /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 000000000..1c1f58f80
--- /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 000000000..f15d3aafc
--- /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 000000000..9e86cbdf8
--- /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 000000000..53cdf1e93
--- /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 000000000..3c8169070
--- /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 000000000..685969277
--- /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 000000000..25e5b91f3
--- /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 000000000..1a3a6ebeb
--- /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 000000000..24a59d8e6
--- /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 000000000..a778e971f
--- /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 000000000..7a074eec6
--- /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 000000000..26bb07818
--- /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/memcheck/tests/solaris/gethrtime.stderr.exp b/memcheck/tests/solaris/gethrtime.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..7ef22e9a4
--- /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 000000000..c10414ca4
--- /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 000000000..221cff79c
--- /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/memcheck/tests/solaris/gethrusec.stderr.exp b/memcheck/tests/solaris/gethrusec.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..bac1b834b
--- /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 000000000..8717ab4b2
--- /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 000000000..eac0724e9
--- /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/memcheck/tests/solaris/getzoneoffset.stderr.exp b/memcheck/tests/solaris/getzoneoffset.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..124b64379
--- /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 000000000..113b0f8d0
--- /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 000000000..88fe09b16
--- /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 000000000..9f7e53aa9
--- /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 000000000..146ea8d2e
--- /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/memcheck/tests/solaris/ioctl.stdout.exp b/memcheck/tests/solaris/ioctl.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..a0daa7865
--- /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 000000000..df4f8e0ce
--- /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 000000000..247b504aa
--- /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/memcheck/tests/solaris/ldynsym.stdout.exp b/memcheck/tests/solaris/ldynsym.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..71c2820f7
--- /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 000000000..71fc9d8b4
--- /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/memcheck/tests/solaris/lsframe1.stderr.exp b/memcheck/tests/solaris/lsframe1.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..e2cb30dcf
--- /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 000000000..ac49677dc
--- /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 000000000..db7f1a034
--- /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/memcheck/tests/solaris/lsframe2.stderr.exp b/memcheck/tests/solaris/lsframe2.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..9905a0d04
--- /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 000000000..7b1ee56a7
--- /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 000000000..ba702f52b
--- /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/memcheck/tests/solaris/mmapobj_bssonly.stderr.exp b/memcheck/tests/solaris/mmapobj_bssonly.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..7ef22e9a4
--- /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 000000000..07937c9c6
--- /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 000000000..cc5e27723
--- /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 000000000..4afbf706a
--- /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 000000000..9ee4bd995
--- /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 000000000..455f9b7db
--- /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 000000000..8ad8b72f2
--- /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 000000000..17ab5cb19
--- /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 000000000..9fed34799
--- /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 000000000..03976f685
--- /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/memcheck/tests/solaris/pkcs11.stderr.exp-solaris b/memcheck/tests/solaris/pkcs11.stderr.exp-solaris
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/memcheck/tests/solaris/pkcs11.stderr.exp-solaris
diff --git a/memcheck/tests/solaris/pkcs11.stdout.exp b/memcheck/tests/solaris/pkcs11.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..a887d63b0
--- /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 000000000..211b39bfe
--- /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 000000000..601a46e3e
--- /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 000000000..d44723dee
--- /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/memcheck/tests/solaris/scalar.stdout.exp b/memcheck/tests/solaris/scalar.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..20d2e6e23
--- /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 000000000..7a4cd763d
--- /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 000000000..aca288039
--- /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/memcheck/tests/solaris/scalar_frealpathat.stdout.exp b/memcheck/tests/solaris/scalar_frealpathat.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..8f535aee7
--- /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 000000000..dfc39fbce
--- /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 000000000..fdb1a5650
--- /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/memcheck/tests/solaris/scalar_ioctl.stdout.exp b/memcheck/tests/solaris/scalar_ioctl.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..3c8560796
--- /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 000000000..929f5cfcb
--- /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 000000000..f80240202
--- /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/memcheck/tests/solaris/scalar_lwp_kill.stdout.exp b/memcheck/tests/solaris/scalar_lwp_kill.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..9b26d9edd
--- /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 000000000..54ec2c226
--- /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 000000000..7a16583ef
--- /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/memcheck/tests/solaris/scalar_lwp_name.stdout.exp b/memcheck/tests/solaris/scalar_lwp_name.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..50ce4ff6f
--- /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 000000000..26a29af59
--- /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 000000000..363100afe
--- /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/memcheck/tests/solaris/scalar_lwp_sigqueue.stdout.exp b/memcheck/tests/solaris/scalar_lwp_sigqueue.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..01be95209
--- /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 000000000..2e0fef024
--- /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 000000000..56dfe0a12
--- /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 000000000..c056c346d
--- /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 000000000..ea0302796
--- /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 000000000..ae2e594ba
--- /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/memcheck/tests/solaris/scalar_obsolete.stdout.exp b/memcheck/tests/solaris/scalar_obsolete.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..4541cb9ac
--- /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 000000000..b2552d725
--- /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 000000000..66690409a
--- /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/memcheck/tests/solaris/scalar_shm_new.stdout.exp b/memcheck/tests/solaris/scalar_shm_new.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..ada1807fe
--- /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 000000000..401b56e81
--- /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 000000000..126c42943
--- /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/memcheck/tests/solaris/scalar_spawn.stdout.exp b/memcheck/tests/solaris/scalar_spawn.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..c5918b8b5
--- /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 000000000..193b6b61d
--- /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 000000000..4c70b0afc
--- /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/memcheck/tests/solaris/scalar_system_stats.stdout.exp b/memcheck/tests/solaris/scalar_system_stats.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..eec4b77ae
--- /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 000000000..7b7555925
--- /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 000000000..286f9c0b5
--- /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 000000000..977e28a4f
--- /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 000000000..594a5c9c0
--- /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 000000000..4b93d308e
--- /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/memcheck/tests/solaris/scalar_utimensat.stdout.exp b/memcheck/tests/solaris/scalar_utimensat.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..788f7ea4d
--- /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 000000000..3591d825c
--- /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 000000000..5bc76e405
--- /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/memcheck/tests/solaris/scalar_utimesys.stdout.exp b/memcheck/tests/solaris/scalar_utimesys.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..e8e252dd0
--- /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 000000000..fb6abc21f
--- /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 000000000..ab3ecde82
--- /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/memcheck/tests/solaris/scalar_uuidsys.stdout.exp b/memcheck/tests/solaris/scalar_uuidsys.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..f08e0207b
--- /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 000000000..0ad8978c1
--- /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 000000000..db561c845
--- /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/memcheck/tests/solaris/scalar_zone_defunct.stdout.exp b/memcheck/tests/solaris/scalar_zone_defunct.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..88279d8f5
--- /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 000000000..83d003ce4
--- /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 000000000..db07a0dec
--- /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 000000000..65dcf64a3
--- /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 000000000..98f343329
--- /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 000000000..de657486d
--- /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/memcheck/tests/solaris/shmat.stderr.exp b/memcheck/tests/solaris/shmat.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..b1c52366b
--- /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 000000000..c65e9a9c5
--- /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 000000000..f3c0632fd
--- /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/memcheck/tests/solaris/spawn.stderr.exp b/memcheck/tests/solaris/spawn.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..38e035251
--- /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 000000000..e40eaa9f8
--- /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 000000000..9dd7e13e1
--- /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 000000000..ad1c373ba
--- /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/memcheck/tests/solaris/strlcpy.stdout.exp b/memcheck/tests/solaris/strlcpy.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..fd327029e
--- /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 000000000..25c4159d6
--- /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 000000000..374cbcd7d
--- /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 000000000..565e44e7c
--- /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 000000000..7aaf34ffe
--- /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 000000000..97b2cd516
--- /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/memcheck/tests/solaris/syscall_at.stdout.exp b/memcheck/tests/solaris/syscall_at.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..f80366d9f
--- /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 000000000..b8c1e9af8
--- /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/memcheck/tests/solaris/thr_daemon_exit_libc.stderr.exp b/memcheck/tests/solaris/thr_daemon_exit_libc.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..db0afc173
--- /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 000000000..819370956
--- /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 000000000..cf1987f7c
--- /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/memcheck/tests/solaris/thr_daemon_exit_standalone.stderr.exp b/memcheck/tests/solaris/thr_daemon_exit_standalone.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/memcheck/tests/solaris/thr_daemon_exit_standalone.stderr.exp
diff --git a/memcheck/tests/solaris/thr_daemon_exit_standalone.stdout.exp b/memcheck/tests/solaris/thr_daemon_exit_standalone.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..9b9061e31
--- /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 85c496a35..9f7790a91 100644
--- a/memcheck/tests/str_tester.c
+++ b/memcheck/tests/str_tester.c
@@ -504,7 +504,7 @@ test_strchrnul (void)
#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 @@ test_strrchr (void)
}
// 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 @@ test_memcpy (void)
}
}
-#if !defined(__APPLE__)
+#if !defined(__APPLE__) && !defined(__sun)
static void
test_mempcpy (void)
{
@@ -1442,7 +1442,7 @@ main (void)
test_strchrnul ();
# endif
-# if !defined(__APPLE__)
+# if !defined(__APPLE__) && !defined(__sun)
/* rawmemchr. */
test_rawmemchr ();
# endif
@@ -1453,7 +1453,7 @@ main (void)
/* strrchr. */
test_strrchr ();
-# if !defined(__APPLE__)
+# if !defined(__APPLE__) && !defined(__sun)
/* memrchr. */
test_memrchr ();
# endif
@@ -1494,7 +1494,7 @@ main (void)
/* 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 62f5cccc7..0340e61c1 100644
--- a/memcheck/tests/suppfree.stderr.exp
+++ b/memcheck/tests/suppfree.stderr.exp
@@ -12,4 +12,7 @@ Invalid free() / delete / delete[] / realloc()
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 bead116ce..6653d3c66 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 247a13489..cbe322cbc 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 95c50b235..b37aeb5d3 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 fa0c18558..c30d1dc85 100644
--- a/memcheck/tests/thread_alloca.c
+++ b/memcheck/tests/thread_alloca.c
@@ -66,7 +66,7 @@ int main(int argc, char **argv, char** envp)
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 91e7f833e..d3f6e4449 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 @@ void* child_fn_1 ( void* arg )
# 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 1cf231375..60903eee1 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 067b2ff13..3f9e593e2 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 19595f99e..63f1d79d6 100644
--- a/memcheck/tests/unit_libcbase.c
+++ b/memcheck/tests/unit_libcbase.c
@@ -28,7 +28,7 @@ void VG_(exit_now)( Int status )
#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 9888fadf6..e327a2ac5 100644
--- a/memcheck/tests/vbit-test/Makefile.am
+++ b/memcheck/tests/vbit-test/Makefile.am
@@ -39,5 +39,5 @@ vbit_test_CPPFLAGS = $(AM_CPPFLAGS_PRI) \
-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 9a51e7902..13b1d5345 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 64b43a3ed..b75e58f18 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 @@ test_binary_op(const irop_t *op, test_data_t *data)
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 e35b3bfb3..0395efec5 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 @@ static irop_t irops[] = {
{ 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 @@ get_irop(IROp op)
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 @@ get_irop(IROp op)
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 7b9c4de99..45f431bb2 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 @@ main(int argc, char *argv[])
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 @@ main(int argc, char *argv[])
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 @@ main(int argc, char *argv[])
}
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 324bb2056..001a543b1 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 77eaa9455..f7aa8fe39 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 30ba87f86..29c7ed5a4 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 170fb8aee..29a688346 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 @@ get_num_operands(IROp op)
}
-/* ---------------------------------------------------------------- */
-
-/* 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 5972ffbfe..f9b052ab9 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 95c1adf2c..d8e5df6ec 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 0c22f9687..eda2e94fb 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 62ba12664..a1f445ac7 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 000000000..f94bfc63e
--- /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 000000000..b19d775c5
--- /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 95b1e8577..30cfd1ce2 100644
--- a/memcheck/tests/x86-linux/scalar.stderr.exp
+++ b/memcheck/tests/x86-linux/scalar.stderr.exp
@@ -415,7 +415,7 @@ Syscall param kill(pid) contains uninitialised byte(s)
...
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 000000000..3759fe667
--- /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 000000000..63c6377d7
--- /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/memcheck/tests/x86-solaris/context_eflags.stderr.exp b/memcheck/tests/x86-solaris/context_eflags.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..8ad7bacd2
--- /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 000000000..20378e9f6
--- /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 000000000..4f37693ea
--- /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 000000000..ce2b2e73c
--- /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/memcheck/tests/x86-solaris/context_eflags2.stdout.exp b/memcheck/tests/x86-solaris/context_eflags2.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..bd575709e
--- /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 000000000..6d618ff74
--- /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 000000000..d77009768
--- /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 000000000..2c3bf1d0a
--- /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 000000000..8a3955d58
--- /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 000000000..6535ea3a8
--- /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 000000000..0f2449816
--- /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 000000000..e8ff23975
--- /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 000000000..df56f5874
--- /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 000000000..adea470f4
--- /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 000000000..d7d5614a4
--- /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 000000000..2cefcc88b
--- /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 000000000..97d6be1c5
--- /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 000000000..a778e971f
--- /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 000000000..9b6bdc2ec
--- /dev/null
+++ b/memcheck/tests/x86-solaris/ldsoexec.c
@@ -0,0 +1,3 @@
+int main(void) {
+ return 0;
+}
diff --git a/memcheck/tests/x86-solaris/ldsoexec.stderr.exp b/memcheck/tests/x86-solaris/ldsoexec.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..5fa046097
--- /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 000000000..3894d2f9d
--- /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 000000000..6599aaf29
--- /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/memcheck/tests/x86-solaris/scalar.stdout.exp b/memcheck/tests/x86-solaris/scalar.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..b80f314aa
--- /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 000000000..ecb68e029
--- /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 000000000..605071737
--- /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/memcheck/tests/x86-solaris/scalar_obsolete.stdout.exp b/memcheck/tests/x86-solaris/scalar_obsolete.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..4541cb9ac
--- /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 864c9b076..c6cd74808 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_fprem ( void )
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_fprem1 ( void )
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 067a6dacb..7b219f618 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 @@ theend:
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 a2122c7c1..e5bb4009e 100644
--- a/memcheck/tests/x86/tronical.S
+++ b/memcheck/tests/x86/tronical.S
@@ -52,7 +52,7 @@ int main()
#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 6cab2878d..0cbbb0316 100644
--- a/memcheck/tests/xml1.c
+++ b/memcheck/tests/xml1.c
@@ -46,7 +46,15 @@ int frame1 ( void )
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 ee3482345..e1abac28a 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 4d83a9faa..6585b18f4 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 c15680b67..fca5d648e 100644
--- a/mpi/Makefile.am
+++ b/mpi/Makefile.am
@@ -42,6 +42,10 @@ if VGCONF_OS_IS_DARWIN
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 a5349e066..cae725b86 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 @@ static __inline__ Bool count_from_Status( /*OUT*/int* recv_count,
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 583e7a9c7..121e6a8b1 100755
--- a/nightly/bin/nightly
+++ b/nightly/bin/nightly
@@ -175,6 +175,9 @@ for logfile in old new ; do
"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 @@ for logfile in old new ; do
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 574486a0e..ffe19e128 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 @@ static void nl_pre_clo_init(void)
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 1dfcfc498..a4204d512 100644
--- a/none/tests/Makefile.am
+++ b/none/tests/Makefile.am
@@ -43,6 +43,9 @@ endif
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 @@ endif
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 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 @@ if ! VGCONF_OS_IS_DARWIN
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 @@ AM_CXXFLAGS += $(AM_FLAG_M3264_PRI)
# 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 @@ else
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_exit2_LDADD = -lpthread
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 527c36e38..69e12081a 100644
--- a/none/tests/allexec.c
+++ b/none/tests/allexec.c
@@ -19,9 +19,15 @@ extern char **environ;
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 000000000..b231b30fc
--- /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 000000000..e4fdacddb
--- /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 000000000..7ef22e9a4
--- /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 000000000..baae6896a
--- /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
index e69398ce8..e69398ce8 100755
--- a/none/tests/amd64-linux/filter_minimal
+++ b/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 000000000..587754a13
--- /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 39d7bac13..3e5a959aa 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 c0144230c..e567c4783 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 587754a13..5bf2c9ca5 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 000000000..fbd1d8beb
--- /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 000000000..fa1556702
--- /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 000000000..2b7f3a04a
--- /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 000000000..3830fbee0
--- /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 000000000..230ab06a2
--- /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 000000000..a5aa542ba
--- /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 000000000..e26e25b05
--- /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/amd64-solaris/coredump_single_thread.stdout.exp b/none/tests/amd64-solaris/coredump_single_thread.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..77604a0ab
--- /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 000000000..00b864f3b
--- /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 000000000..3f25b78b8
--- /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 000000000..9840da5da
--- /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 000000000..ca1f503a8
--- /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/amd64-solaris/coredump_single_thread_sse.stdout.exp b/none/tests/amd64-solaris/coredump_single_thread_sse.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..52925974f
--- /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 000000000..3cc5413da
--- /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 000000000..0ae9313a9
--- /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 000000000..8fcb90e58
--- /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/amd64-solaris/syscall_return_args.stderr.exp b/none/tests/amd64-solaris/syscall_return_args.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..ce1591dbd
--- /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 21d419e4d..be4113b6c 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 @@ EXTRA_DIST = \
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 @@ check_PROGRAMS = \
bug127521-64 bug132813-amd64 bug132918 bug137714-amd64 \
clc \
cmpxchg \
+ getseg \
$(INSN_TESTS) \
nan80and64 \
rcl-amd64 \
@@ -103,27 +105,30 @@ check_PROGRAMS = \
if BUILD_ADDR32_TESTS
check_PROGRAMS += asorep
endif
+if BUILD_AVX_TESTS
+if BUILD_VPCLMULQDQ_TESTS
+ check_PROGRAMS += avx-1
+endif
+endif
+if BUILD_AVX2_TESTS
+if !COMPILER_IS_ICC
+ 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_AVX_TESTS
-if BUILD_VPCLMULQDQ_TESTS
- check_PROGRAMS += avx-1
-endif
-endif
-if BUILD_AVX2_TESTS
-if !COMPILER_IS_ICC
- check_PROGRAMS += avx2-1
-endif
-endif
if BUILD_TSX_TESTS
check_PROGRAMS += tm1 xacq_xrel
endif
@@ -133,9 +138,6 @@ endif
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 d46485710..baf9bbe1e 100644
--- a/none/tests/amd64/amd64locked.c
+++ b/none/tests/amd64/amd64locked.c
@@ -14,6 +14,18 @@ typedef unsigned short UShort;
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 @@ void do_bt_G_E_tests ( void )
/* 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 @@ void do_bt_G_E_tests ( void )
/* 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 @@ void do_bt_G_E_tests ( void )
/* 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 @@ int main ( void )
// 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 97202d29b..abe8b734a 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 d02f7e332..11759f25d 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 @@ void randBlock ( Block* b )
\
__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_0xD,
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_0xD,
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 @@ int main ( void )
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 @@ int main ( void )
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 @@ int main ( void )
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 e298cb69e..f9eda1a27 100644
--- a/none/tests/amd64/avx-1.stdout.exp
+++ b/none/tests/amd64/avx-1.stdout.exp
@@ -3157,7 +3157,7 @@ VCMPSS_128_0xC(mem)
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 @@ VCMPSS_128_0xC(reg)
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 @@ VCMPSS_128_0xC(mem)
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 @@ VCMPSS_128_0xC(reg)
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 @@ VCMPSS_128_0xC(mem)
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 @@ VCMPSS_128_0xC(reg)
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 @@ VCMPSS_128_0xC(mem)
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 @@ VCMPSS_128_0xD(reg)
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 @@ VCMPSS_128_0xD(mem)
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 @@ VCMPSS_128_0xD(reg)
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 @@ VCMPSS_128_0xD(mem)
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 @@ VCMPSS_128_0xD(reg)
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 @@ VCMPSS_128_0xD(mem)
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 @@ VCMPSS_128_0xE(reg)
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 @@ VCMPSS_128_0xE(mem)
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 @@ VCMPSS_128_0xE(reg)
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 @@ VCMPSS_128_0xE(mem)
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 @@ VCMPSS_128_0xE(reg)
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 @@ VCMPSS_128_0x12(mem)
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 @@ VCMPSS_128_0x16(reg)
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 @@ VCMPSS_128_0x16(mem)
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 @@ VCMPSS_128_0x16(reg)
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 @@ VCMPSS_128_0x16(mem)
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 @@ VCMPSS_128_0x16(reg)
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 @@ VCMPSS_128_0x16(mem)
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 @@ VCMPSS_128_0x1E(reg)
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 @@ VCMPSS_128_0x1E(mem)
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 @@ VCMPSS_128_0x1E(reg)
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 @@ VCMPSS_128_0x1E(mem)
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 @@ VCMPSS_128_0x1E(reg)
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 @@ VCMPSS_128_0x1E(mem)
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 @@ VMOVDDUP_XMMorMEM64_to_XMM(reg)
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 @@ VMOVDDUP_XMMorMEM64_to_XMM(mem)
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 @@ VMOVDDUP_XMMorMEM64_to_XMM(reg)
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 @@ VMOVDDUP_XMMorMEM64_to_XMM(mem)
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 @@ VMOVDDUP_XMMorMEM64_to_XMM(reg)
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 @@ VMOVDDUP_XMMorMEM64_to_XMM(mem)
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 @@ VMOVD_IREGorMEM32_to_XMM(reg)
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 @@ VMOVD_IREGorMEM32_to_XMM(mem)
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 @@ VMOVD_IREGorMEM32_to_XMM(reg)
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 @@ VMOVD_IREGorMEM32_to_XMM(mem)
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 @@ VMOVD_IREGorMEM32_to_XMM(reg)
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 @@ VMOVD_IREGorMEM32_to_XMM(mem)
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 @@ VMOVQ_XMM_MEM64(reg)
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 @@ VMOVQ_XMM_MEM64(mem)
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 @@ VMOVQ_XMM_MEM64(reg)
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 @@ VMOVQ_XMM_MEM64(mem)
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 @@ VMOVQ_XMM_MEM64(reg)
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 @@ VMOVQ_XMM_MEM64(mem)
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 @@ VMOVDQA_GtoE_256(reg)
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 @@ VMOVDQA_GtoE_256(mem)
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 @@ VMOVDQA_GtoE_256(reg)
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 @@ VMOVDQA_GtoE_256(mem)
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 @@ VMOVDQA_GtoE_256(reg)
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 @@ VMOVDQA_GtoE_256(mem)
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 @@ VMOVDQA_GtoE_128(reg)
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 @@ VMOVDQA_GtoE_128(mem)
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 @@ VMOVDQA_GtoE_128(reg)
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 @@ VMOVDQA_GtoE_128(mem)
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 @@ VMOVDQA_GtoE_128(reg)
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 @@ VMOVDQA_GtoE_128(mem)
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 @@ VMOVDQU_GtoE_128(reg)
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 @@ VMOVDQU_GtoE_128(mem)
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 @@ VMOVDQU_GtoE_128(reg)
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 @@ VMOVDQU_GtoE_128(mem)
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 @@ VMOVDQU_GtoE_128(reg)
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 @@ VMOVDQU_GtoE_128(mem)
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 @@ VMOVDQA_EtoG_256(reg)
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 @@ VMOVDQA_EtoG_256(mem)
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 @@ VMOVDQA_EtoG_256(reg)
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 @@ VMOVDQA_EtoG_256(mem)
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 @@ VMOVDQA_EtoG_256(reg)
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 @@ VMOVDQA_EtoG_256(mem)
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 @@ VMOVDQA_EtoG_128(reg)
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 @@ VMOVDQA_EtoG_128(mem)
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 @@ VMOVDQA_EtoG_128(reg)
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 @@ VMOVDQA_EtoG_128(mem)
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 @@ VMOVDQA_EtoG_128(reg)
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 @@ VMOVDQA_EtoG_128(mem)
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 @@ VMOVDQU_EtoG_128(reg)
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 @@ VMOVDQU_EtoG_128(mem)
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 @@ VMOVDQU_EtoG_128(reg)
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 @@ VMOVDQU_EtoG_128(mem)
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 @@ VMOVDQU_EtoG_128(reg)
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 @@ VMOVDQU_EtoG_128(mem)
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 @@ VMOVAPD_GtoE_128(reg)
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 @@ VMOVAPD_GtoE_128(mem)
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 @@ VMOVAPD_GtoE_128(reg)
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 @@ VMOVAPD_GtoE_128(mem)
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 @@ VMOVAPD_GtoE_128(reg)
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 @@ VMOVAPD_GtoE_128(mem)
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 @@ VMOVAPD_GtoE_256(reg)
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 @@ VMOVAPD_GtoE_256(mem)
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 @@ VMOVAPD_GtoE_256(reg)
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 @@ VMOVAPD_GtoE_256(mem)
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 @@ VMOVAPD_GtoE_256(reg)
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 @@ VMOVAPD_GtoE_256(mem)
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 @@ VMOVAPS_GtoE_128(reg)
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 @@ VMOVAPS_GtoE_128(mem)
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 @@ VMOVAPS_GtoE_128(reg)
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 @@ VMOVAPS_GtoE_128(mem)
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 @@ VMOVAPS_GtoE_128(reg)
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 @@ VMOVAPS_GtoE_128(mem)
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 @@ VMOVAPS_GtoE_256(reg)
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 @@ VMOVAPS_GtoE_256(mem)
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 @@ VMOVAPS_GtoE_256(reg)
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 @@ VMOVAPS_GtoE_256(mem)
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 @@ VMOVAPS_GtoE_256(reg)
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 @@ VMOVAPS_GtoE_256(mem)
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 @@ VMOVAPS_EtoG_128(reg)
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 @@ VMOVAPS_EtoG_128(mem)
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 @@ VMOVAPS_EtoG_128(reg)
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 @@ VMOVAPS_EtoG_128(mem)
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 @@ VMOVAPS_EtoG_128(reg)
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 @@ VMOVAPS_EtoG_128(mem)
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 @@ VMOVAPD_EtoG_256(reg)
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 @@ VMOVAPD_EtoG_256(mem)
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 @@ VMOVAPD_EtoG_256(reg)
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 @@ VMOVAPD_EtoG_256(mem)
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 @@ VMOVAPD_EtoG_256(reg)
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 @@ VMOVAPD_EtoG_256(mem)
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 @@ VMOVAPD_EtoG_128(reg)
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 @@ VMOVAPD_EtoG_128(mem)
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 @@ VMOVAPD_EtoG_128(reg)
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 @@ VMOVAPD_EtoG_128(mem)
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 @@ VMOVAPD_EtoG_128(reg)
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 @@ VMOVAPD_EtoG_128(mem)
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 @@ VMOVUPD_GtoE_128(reg)
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 @@ VMOVUPD_GtoE_128(mem)
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 @@ VMOVUPD_GtoE_128(reg)
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 @@ VMOVUPD_GtoE_128(mem)
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 @@ VMOVUPD_GtoE_128(reg)
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 @@ VMOVUPD_GtoE_128(mem)
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 @@ VMOVSS_XMM_M32(reg)
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 @@ VMOVSS_XMM_M32(mem)
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 @@ VMOVSS_XMM_M32(reg)
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 @@ VMOVSS_XMM_M32(mem)
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 @@ VMOVSS_XMM_M32(reg)
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 @@ VMOVSS_XMM_M32(mem)
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 @@ VMOVSD_XMM_M64(reg)
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 @@ VMOVSD_XMM_M64(mem)
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 @@ VMOVSD_XMM_M64(reg)
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 @@ VMOVSD_XMM_M64(mem)
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 @@ VMOVSD_XMM_M64(reg)
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 @@ VMOVSD_XMM_M64(mem)
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 @@ VMOVSS_M64_XMM(reg)
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 @@ VMOVSS_M64_XMM(mem)
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 @@ VMOVSS_M64_XMM(reg)
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 @@ VMOVSS_M64_XMM(mem)
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 @@ VMOVSS_M64_XMM(reg)
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 @@ VMOVSS_M64_XMM(mem)
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 @@ VMOVSD_M64_XMM(reg)
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 @@ VMOVSD_M64_XMM(mem)
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 @@ VMOVSD_M64_XMM(reg)
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 @@ VMOVSD_M64_XMM(mem)
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 @@ VMOVSD_M64_XMM(reg)
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 @@ VMOVSD_M64_XMM(mem)
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 @@ VINSERTPS_0x39_128(reg)
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 @@ VINSERTPS_0x39_128(mem)
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 @@ VINSERTPS_0x39_128(reg)
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 @@ VINSERTPS_0x39_128(mem)
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 @@ VINSERTPS_0x39_128(reg)
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 @@ VINSERTPS_0x39_128(mem)
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 @@ VPUNPCKLDQ_128(reg)
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 @@ VPUNPCKLDQ_128(mem)
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 @@ VPUNPCKLDQ_128(reg)
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 @@ VPUNPCKLDQ_128(mem)
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 @@ VPUNPCKLDQ_128(reg)
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 @@ VPUNPCKLDQ_128(mem)
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 @@ VPACKSSDW_128(reg)
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 @@ VPACKSSDW_128(mem)
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 @@ VPACKSSDW_128(reg)
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 @@ VPACKSSDW_128(mem)
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 @@ VPACKSSDW_128(reg)
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 @@ VPACKSSDW_128(mem)
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 @@ VPADDW_128(reg)
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 @@ VPADDW_128(mem)
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 @@ VPADDW_128(reg)
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 @@ VPADDW_128(mem)
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 @@ VPADDW_128(reg)
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 @@ VPADDW_128(mem)
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 @@ VPSRLW_0x05_128(reg)
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 @@ VPSRLW_0x05_128(mem)
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 @@ VPSRLW_0x05_128(reg)
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 @@ VPSRLW_0x05_128(mem)
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 @@ VPSRLW_0x05_128(reg)
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 @@ VPSRLW_0x05_128(mem)
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 @@ VPSLLW_0x05_128(reg)
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 @@ VPSLLW_0x05_128(mem)
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 @@ VPSLLW_0x05_128(reg)
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 @@ VPSLLW_0x05_128(mem)
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 @@ VPSLLW_0x05_128(reg)
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 @@ VPSLLW_0x05_128(mem)
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 @@ VPUNPCKLQDQ_128(reg)
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 @@ VPUNPCKLQDQ_128(mem)
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 @@ VPUNPCKLQDQ_128(reg)
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 @@ VPUNPCKLQDQ_128(mem)
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 @@ VPUNPCKLQDQ_128(reg)
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 @@ VPUNPCKLQDQ_128(mem)
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 @@ VPINSRD_128(reg)
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 @@ VPINSRD_128(mem)
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 @@ VPINSRD_128(reg)
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 @@ VPINSRD_128(mem)
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 @@ VPINSRD_128(reg)
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 @@ VPINSRD_128(mem)
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 @@ VMOVD_XMM_to_MEM32(reg)
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 @@ VMOVD_XMM_to_MEM32(mem)
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 @@ VMOVD_XMM_to_MEM32(reg)
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 @@ VMOVD_XMM_to_MEM32(mem)
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 @@ VMOVD_XMM_to_MEM32(reg)
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 @@ VMOVD_XMM_to_MEM32(mem)
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 @@ VPANDN_128(reg)
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 @@ VPANDN_128(mem)
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 @@ VPANDN_128(reg)
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 @@ VPANDN_128(mem)
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 @@ VPANDN_128(reg)
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 @@ VPANDN_128(mem)
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 @@ VPSLLDQ_0x05_128(reg)
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 @@ VPSLLDQ_0x05_128(mem)
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 @@ VPSLLDQ_0x05_128(reg)
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 @@ VPSLLDQ_0x05_128(mem)
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 @@ VPSLLDQ_0x05_128(reg)
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 @@ VPSLLDQ_0x05_128(mem)
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 @@ VPSRLDQ_0x05_128(reg)
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 @@ VPSRLDQ_0x05_128(mem)
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 @@ VPSRLDQ_0x05_128(reg)
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 @@ VPSRLDQ_0x05_128(mem)
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 @@ VPSRLDQ_0x05_128(reg)
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 @@ VPSRLDQ_0x05_128(mem)
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 @@ VPSUBUSB_128(reg)
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 @@ VPSUBUSB_128(mem)
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 @@ VPSUBUSB_128(reg)
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 @@ VPSUBUSB_128(mem)
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 @@ VPSUBUSB_128(reg)
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 @@ VPSUBUSB_128(mem)
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 @@ VPSUBSB_128(reg)
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 @@ VPSUBSB_128(mem)
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 @@ VPSUBSB_128(reg)
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 @@ VPSUBSB_128(mem)
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 @@ VPSUBSB_128(reg)
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 @@ VPSUBSB_128(mem)
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 @@ VPSLLD_0x05_128(reg)
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 @@ VPSLLD_0x05_128(mem)
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 @@ VPSLLD_0x05_128(reg)
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 @@ VPSLLD_0x05_128(mem)
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 @@ VPSLLD_0x05_128(reg)
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 @@ VPSLLD_0x05_128(mem)
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 @@ VPSRLD_0x05_128(reg)
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 @@ VPSRLD_0x05_128(mem)
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 @@ VPSRLD_0x05_128(reg)
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 @@ VPSRLD_0x05_128(mem)
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 @@ VPSRLD_0x05_128(reg)
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 @@ VPSRLD_0x05_128(mem)
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 @@ VPSRAD_0x05_128(reg)
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 @@ VPSRAD_0x05_128(mem)
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 @@ VPSRAD_0x05_128(reg)
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 @@ VPSRAD_0x05_128(mem)
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 @@ VPSRAD_0x05_128(reg)
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 @@ VPSRAD_0x05_128(mem)
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 @@ VPUNPCKLWD_128(reg)
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 @@ VPUNPCKLWD_128(mem)
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 @@ VPUNPCKLWD_128(reg)
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 @@ VPUNPCKLWD_128(mem)
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 @@ VPUNPCKLWD_128(reg)
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 @@ VPUNPCKLWD_128(mem)
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 @@ VPUNPCKHWD_128(reg)
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 @@ VPUNPCKHWD_128(mem)
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 @@ VPUNPCKHWD_128(reg)
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 @@ VPUNPCKHWD_128(mem)
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 @@ VPUNPCKHWD_128(reg)
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 @@ VPUNPCKHWD_128(mem)
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 @@ VPADDUSB_128(reg)
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 @@ VPADDUSB_128(mem)
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 @@ VPADDUSB_128(reg)
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 @@ VPADDUSB_128(mem)
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 @@ VPADDUSB_128(reg)
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 @@ VPADDUSB_128(mem)
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 @@ VPMULHUW_128(reg)
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 @@ VPMULHUW_128(mem)
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 @@ VPMULHUW_128(reg)
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 @@ VPMULHUW_128(mem)
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 @@ VPMULHUW_128(reg)
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 @@ VPMULHUW_128(mem)
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 @@ VPADDUSW_128(reg)
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 @@ VPADDUSW_128(mem)
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 @@ VPADDUSW_128(reg)
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 @@ VPADDUSW_128(mem)
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 @@ VPADDUSW_128(reg)
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 @@ VPADDUSW_128(mem)
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 @@ VPMULLW_128(reg)
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 @@ VPMULLW_128(mem)
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 @@ VPMULLW_128(reg)
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 @@ VPMULLW_128(mem)
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 @@ VPMULLW_128(reg)
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 @@ VPMULLW_128(mem)
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 @@ VPSHUFHW_0x39_128(reg)
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 @@ VPSHUFHW_0x39_128(mem)
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 @@ VPSHUFHW_0x39_128(reg)
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 @@ VPSHUFHW_0x39_128(mem)
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 @@ VPSHUFHW_0x39_128(reg)
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 @@ VPSHUFHW_0x39_128(mem)
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 @@ VPSHUFLW_0x39_128(reg)
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 @@ VPSHUFLW_0x39_128(mem)
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 @@ VPSHUFLW_0x39_128(reg)
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 @@ VPSHUFLW_0x39_128(mem)
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 @@ VPSHUFLW_0x39_128(reg)
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 @@ VPSHUFLW_0x39_128(mem)
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 @@ VCVTPS2DQ_128(reg)
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 @@ VCVTPS2DQ_128(mem)
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 @@ VCVTPS2DQ_128(reg)
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 @@ VCVTPS2DQ_128(mem)
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 @@ VCVTPS2DQ_128(reg)
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 @@ VCVTPS2DQ_128(mem)
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 @@ VSUBPS_128(reg)
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 @@ VSUBPS_128(mem)
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 @@ VSUBPS_128(reg)
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 @@ VSUBPS_128(mem)
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 @@ VSUBPS_128(reg)
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 @@ VSUBPS_128(mem)
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 @@ VADDPS_128(reg)
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 @@ VADDPS_128(mem)
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 @@ VADDPS_128(reg)
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 @@ VADDPS_128(mem)
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 @@ VADDPS_128(reg)
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 @@ VADDPS_128(mem)
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 @@ VMULPS_128(reg)
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 @@ VMULPS_128(mem)
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 @@ VMULPS_128(reg)
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 @@ VMULPS_128(mem)
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 @@ VMULPS_128(reg)
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 @@ VMULPS_128(mem)
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 @@ VMAXPS_128(reg)
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 @@ VMAXPS_128(mem)
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 @@ VMAXPS_128(reg)
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 @@ VMAXPS_128(mem)
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 @@ VMAXPS_128(reg)
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 @@ VMAXPS_128(mem)
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 @@ VMINPS_128(reg)
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 @@ VMINPS_128(mem)
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 @@ VMINPS_128(reg)
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 @@ VMINPS_128(mem)
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 @@ VMINPS_128(reg)
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 @@ VMINPS_128(mem)
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 @@ VSHUFPS_0x39_128(reg)
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 @@ VSHUFPS_0x39_128(mem)
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 @@ VSHUFPS_0x39_128(reg)
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 @@ VSHUFPS_0x39_128(mem)
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 @@ VSHUFPS_0x39_128(reg)
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 @@ VSHUFPS_0x39_128(mem)
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 @@ VPCMPEQB_128(reg)
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 @@ VPCMPEQB_128(mem)
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 @@ VPCMPEQB_128(reg)
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 @@ VPCMPEQB_128(mem)
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 @@ VPCMPEQB_128(reg)
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 @@ VPCMPEQB_128(mem)
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 @@ VMOVHPD_128_StoreForm(reg)
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 @@ VMOVHPD_128_StoreForm(mem)
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 @@ VMOVHPD_128_StoreForm(reg)
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 @@ VMOVHPD_128_StoreForm(mem)
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 @@ VMOVHPD_128_StoreForm(reg)
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 @@ VMOVHPD_128_StoreForm(mem)
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 @@ VPAND_128(reg)
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 @@ VPAND_128(mem)
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 @@ VPAND_128(reg)
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 @@ VPAND_128(mem)
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 @@ VPAND_128(reg)
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 @@ VPAND_128(mem)
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 @@ VPMOVMSKB_128(reg)
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 @@ VPMOVMSKB_128(mem)
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 @@ VPMOVMSKB_128(reg)
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 @@ VPMOVMSKB_128(mem)
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 @@ VPMOVMSKB_128(reg)
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 @@ VPMOVMSKB_128(mem)
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 @@ VCVTTSS2SI_64(reg)
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 @@ VCVTTSS2SI_64(mem)
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 @@ VCVTTSS2SI_64(reg)
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 @@ VCVTTSS2SI_64(mem)
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 @@ VCVTTSS2SI_64(reg)
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 @@ VCVTTSS2SI_64(mem)
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 @@ VPACKUSWB_128(reg)
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 @@ VPACKUSWB_128(mem)
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 @@ VPACKUSWB_128(reg)
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 @@ VPACKUSWB_128(mem)
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 @@ VPACKUSWB_128(reg)
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 @@ VPACKUSWB_128(mem)
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 @@ VCVTSS2SD_128(reg)
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 @@ VCVTSS2SD_128(mem)
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 @@ VCVTSS2SD_128(reg)
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 @@ VCVTSS2SD_128(mem)
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 @@ VCVTSS2SD_128(reg)
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 @@ VCVTSS2SD_128(mem)
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 @@ VCVTSD2SS_128(reg)
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 @@ VCVTSD2SS_128(mem)
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 @@ VCVTSD2SS_128(reg)
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 @@ VCVTSD2SS_128(mem)
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 @@ VCVTSD2SS_128(reg)
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 @@ VCVTSD2SS_128(mem)
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 @@ VMOVD_XMM_to_IREG32(reg)
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 @@ VMOVD_XMM_to_IREG32(mem)
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 @@ VMOVD_XMM_to_IREG32(reg)
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 @@ VMOVD_XMM_to_IREG32(mem)
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 @@ VMOVD_XMM_to_IREG32(reg)
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 @@ VMOVD_XMM_to_IREG32(mem)
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 @@ VPCMPESTRM_0x45_128(reg)
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 @@ VPCMPESTRM_0x45_128(mem)
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 @@ VPCMPESTRM_0x45_128(reg)
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 @@ VPCMPESTRM_0x45_128(mem)
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 @@ VPCMPESTRM_0x45_128(reg)
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 @@ VPCMPESTRM_0x45_128(mem)
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 @@ VMOVQ_IREGorMEM64_to_XMM(reg)
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 @@ VMOVQ_IREGorMEM64_to_XMM(mem)
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 @@ VMOVQ_IREGorMEM64_to_XMM(reg)
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 @@ VMOVQ_IREGorMEM64_to_XMM(mem)
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 @@ VMOVQ_IREGorMEM64_to_XMM(reg)
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 @@ VMOVQ_IREGorMEM64_to_XMM(mem)
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 @@ VMOVUPS_XMM_to_XMMorMEM(reg)
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 @@ VMOVUPS_XMM_to_XMMorMEM(mem)
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 @@ VMOVUPS_XMM_to_XMMorMEM(reg)
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 @@ VMOVUPS_XMM_to_XMMorMEM(mem)
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 @@ VMOVUPS_XMM_to_XMMorMEM(reg)
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 @@ VMOVUPS_XMM_to_XMMorMEM(mem)
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 @@ VMOVNTDQ_128(reg)
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 @@ VMOVNTDQ_128(mem)
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 @@ VMOVNTDQ_128(reg)
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 @@ VMOVNTDQ_128(mem)
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 @@ VMOVNTDQ_128(reg)
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 @@ VMOVNTDQ_128(mem)
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 @@ VMOVLHPS_128(reg)
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 @@ VMOVLHPS_128(mem)
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 @@ VMOVLHPS_128(reg)
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 @@ VMOVLHPS_128(mem)
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 @@ VMOVLHPS_128(reg)
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 @@ VMOVLHPS_128(mem)
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 @@ VPABSD_128(reg)
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 @@ VPABSD_128(mem)
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 @@ VPABSD_128(reg)
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 @@ VPABSD_128(mem)
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 @@ VPABSD_128(reg)
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 @@ VPABSD_128(mem)
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 @@ VMOVHLPS_128(reg)
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 @@ VMOVHLPS_128(mem)
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 @@ VMOVHLPS_128(reg)
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 @@ VMOVHLPS_128(mem)
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 @@ VMOVHLPS_128(reg)
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 @@ VMOVHLPS_128(mem)
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 @@ VMOVQ_XMM_to_IREG64(reg)
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 @@ VMOVQ_XMM_to_IREG64(mem)
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 @@ VMOVQ_XMM_to_IREG64(reg)
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 @@ VMOVQ_XMM_to_IREG64(mem)
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 @@ VMOVQ_XMM_to_IREG64(reg)
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 @@ VMOVQ_XMM_to_IREG64(mem)
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 @@ VMOVQ_XMMorMEM64_to_XMM(reg)
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 @@ VMOVQ_XMMorMEM64_to_XMM(mem)
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 @@ VMOVQ_XMMorMEM64_to_XMM(reg)
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 @@ VMOVQ_XMMorMEM64_to_XMM(mem)
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 @@ VMOVQ_XMMorMEM64_to_XMM(reg)
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 @@ VMOVQ_XMMorMEM64_to_XMM(mem)
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 @@ VCVTTSS2SI_32(reg)
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 @@ VCVTTSS2SI_32(mem)
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 @@ VCVTTSS2SI_32(reg)
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 @@ VCVTTSS2SI_32(mem)
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 @@ VCVTTSS2SI_32(reg)
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 @@ VCVTTSS2SI_32(mem)
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 @@ VPUNPCKLBW_128(reg)
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 @@ VPUNPCKLBW_128(mem)
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 @@ VPUNPCKLBW_128(reg)
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 @@ VPUNPCKLBW_128(mem)
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 @@ VPUNPCKLBW_128(reg)
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 @@ VPUNPCKLBW_128(mem)
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 @@ VPUNPCKHBW_128(reg)
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 @@ VPUNPCKHBW_128(mem)
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 @@ VPUNPCKHBW_128(reg)
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 @@ VPUNPCKHBW_128(mem)
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 @@ VPUNPCKHBW_128(reg)
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 @@ VPUNPCKHBW_128(mem)
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 @@ VMULSS_128(reg)
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 @@ VMULSS_128(mem)
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 @@ VMULSS_128(reg)
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 @@ VMULSS_128(mem)
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 @@ VMULSS_128(reg)
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 @@ VMULSS_128(mem)
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 @@ VSUBSS_128(reg)
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 @@ VSUBSS_128(mem)
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 @@ VSUBSS_128(reg)
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 @@ VSUBSS_128(mem)
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 @@ VSUBSS_128(reg)
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 @@ VSUBSS_128(mem)
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 @@ VADDSS_128(reg)
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 @@ VADDSS_128(mem)
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 @@ VADDSS_128(reg)
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 @@ VADDSS_128(mem)
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 @@ VADDSS_128(reg)
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 @@ VADDSS_128(mem)
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 @@ VDIVSS_128(reg)
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 @@ VDIVSS_128(mem)
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 @@ VDIVSS_128(reg)
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 @@ VDIVSS_128(mem)
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 @@ VDIVSS_128(reg)
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 @@ VDIVSS_128(mem)
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 @@ VUNPCKLPS_128(reg)
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 @@ VUNPCKLPS_128(mem)
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 @@ VUNPCKLPS_128(reg)
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 @@ VUNPCKLPS_128(mem)
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 @@ VUNPCKLPS_128(reg)
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 @@ VUNPCKLPS_128(mem)
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 @@ VCVTSI2SS_128(reg)
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 @@ VCVTSI2SS_128(mem)
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 @@ VCVTSI2SS_128(reg)
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 @@ VCVTSI2SS_128(mem)
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 @@ VCVTSI2SS_128(reg)
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 @@ VCVTSI2SS_128(mem)
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 @@ VANDPS_128(reg)
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 @@ VANDPS_128(mem)
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 @@ VANDPS_128(reg)
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 @@ VANDPS_128(mem)
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 @@ VANDPS_128(reg)
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 @@ VANDPS_128(mem)
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 @@ VMINSS_128(reg)
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 @@ VMINSS_128(mem)
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 @@ VMINSS_128(reg)
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 @@ VMINSS_128(mem)
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 @@ VMINSS_128(reg)
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 @@ VMINSS_128(mem)
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 @@ VMAXSS_128(reg)
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 @@ VMAXSS_128(mem)
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 @@ VMAXSS_128(reg)
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 @@ VMAXSS_128(mem)
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 @@ VMAXSS_128(reg)
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 @@ VMAXSS_128(mem)
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 @@ VANDNPS_128(reg)
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 @@ VANDNPS_128(mem)
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 @@ VANDNPS_128(reg)
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 @@ VANDNPS_128(mem)
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 @@ VANDNPS_128(reg)
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 @@ VANDNPS_128(mem)
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 @@ VORPS_128(reg)
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 @@ VORPS_128(mem)
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 @@ VORPS_128(reg)
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 @@ VORPS_128(mem)
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 @@ VORPS_128(reg)
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 @@ VORPS_128(mem)
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 @@ VSQRTSD_128(reg)
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 @@ VSQRTSD_128(mem)
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 @@ VSQRTSD_128(reg)
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 @@ VSQRTSD_128(mem)
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 @@ VSQRTSD_128(reg)
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 @@ VSQRTSD_128(mem)
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 @@ VCMPSD_128_0x0(reg)
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 @@ VCMPSD_128_0x0(mem)
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 @@ VCMPSD_128_0x0(reg)
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 @@ VCMPSD_128_0x0(mem)
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 @@ VCMPSD_128_0x0(reg)
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 @@ VCMPSD_128_0x0(mem)
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 @@ VCMPSD_128_0x1(reg)
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 @@ VCMPSD_128_0x1(mem)
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 @@ VCMPSD_128_0x1(reg)
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 @@ VCMPSD_128_0x1(mem)
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 @@ VCMPSD_128_0x1(reg)
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 @@ VCMPSD_128_0x1(mem)
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 @@ VCMPSD_128_0x2(reg)
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 @@ VCMPSD_128_0x2(mem)
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 @@ VCMPSD_128_0x2(reg)
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 @@ VCMPSD_128_0x2(mem)
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 @@ VCMPSD_128_0x2(reg)
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 @@ VCMPSD_128_0x2(mem)
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 @@ VCMPSD_128_0x3(reg)
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 @@ VCMPSD_128_0x3(mem)
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 @@ VCMPSD_128_0x3(reg)
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 @@ VCMPSD_128_0x3(mem)
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 @@ VCMPSD_128_0x3(reg)
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 @@ VCMPSD_128_0x3(mem)
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 @@ VCMPSD_128_0x4(reg)
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 @@ VCMPSD_128_0x4(mem)
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 @@ VCMPSD_128_0x4(reg)
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 @@ VCMPSD_128_0x4(mem)
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 @@ VCMPSD_128_0x4(reg)
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 @@ VCMPSD_128_0x4(mem)
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 @@ VCMPSD_128_0x5(reg)
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 @@ VCMPSD_128_0x5(mem)
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 @@ VCMPSD_128_0x5(reg)
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 @@ VCMPSD_128_0x5(mem)
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 @@ VCMPSD_128_0x5(reg)
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 @@ VCMPSD_128_0x5(mem)
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 @@ VCMPSD_128_0x6(reg)
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 @@ VCMPSD_128_0x6(mem)
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 @@ VCMPSD_128_0x6(reg)
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 @@ VCMPSD_128_0x6(mem)
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 @@ VCMPSD_128_0x6(reg)
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 @@ VCMPSD_128_0x6(mem)
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 @@ VCMPSD_128_0x7(reg)
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 @@ VCMPSD_128_0x7(mem)
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 @@ VCMPSD_128_0x7(reg)
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 @@ VCMPSD_128_0x7(mem)
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 @@ VCMPSD_128_0x7(reg)
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 @@ VCMPSD_128_0x7(mem)
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 @@ VCMPSD_128_0x8(reg)
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 @@ VCMPSD_128_0x8(mem)
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 @@ VCMPSD_128_0x8(reg)
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 @@ VCMPSD_128_0x8(mem)
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 @@ VCMPSD_128_0x8(reg)
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 @@ VCMPSD_128_0x8(mem)
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 @@ VCMPSD_128_0xA(reg)
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 @@ VCMPSD_128_0xA(mem)
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 @@ VCMPSD_128_0xA(reg)
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 @@ VCMPSD_128_0xA(mem)
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 @@ VCMPSD_128_0xA(reg)
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 @@ VCMPSD_128_0xA(mem)
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 @@ VCMPSD_128_0xC(reg)
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 @@ VCMPSD_128_0xC(mem)
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 @@ VCMPSD_128_0xC(reg)
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 @@ VCMPSD_128_0xC(mem)
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 @@ VCMPSD_128_0xC(reg)
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 @@ VCMPSD_128_0xC(mem)
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 @@ VCMPSD_128_0xD(reg)
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 @@ VCMPSD_128_0xD(mem)
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 @@ VCMPSD_128_0xD(reg)
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 @@ VCMPSD_128_0xD(mem)
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 @@ VCMPSD_128_0xD(reg)
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 @@ VCMPSD_128_0xD(mem)
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 @@ VCMPSD_128_0xE(reg)
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 @@ VCMPSD_128_0xE(mem)
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 @@ VCMPSD_128_0xE(reg)
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 @@ VCMPSD_128_0xE(mem)
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 @@ VCMPSD_128_0xE(reg)
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 @@ VCMPSD_128_0xE(mem)
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 @@ VCMPSD_128_0x11(reg)
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 @@ VCMPSD_128_0x11(mem)
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 @@ VCMPSD_128_0x11(reg)
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 @@ VCMPSD_128_0x11(mem)
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 @@ VCMPSD_128_0x11(reg)
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 @@ VCMPSD_128_0x11(mem)
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 @@ VCMPSD_128_0x12(reg)
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 @@ VCMPSD_128_0x12(mem)
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 @@ VCMPSD_128_0x12(reg)
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 @@ VCMPSD_128_0x12(mem)
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 @@ VCMPSD_128_0x12(reg)
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 @@ VCMPSD_128_0x12(mem)
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 @@ VCMPSD_128_0x16(reg)
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 @@ VCMPSD_128_0x16(mem)
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 @@ VCMPSD_128_0x16(reg)
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 @@ VCMPSD_128_0x16(mem)
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 @@ VCMPSD_128_0x16(reg)
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 @@ VCMPSD_128_0x16(mem)
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 @@ VCMPSD_128_0x1E(reg)
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 @@ VCMPSD_128_0x1E(mem)
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 @@ VCMPSD_128_0x1E(reg)
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 @@ VCMPSD_128_0x1E(mem)
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 @@ VCMPSD_128_0x1E(reg)
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 @@ VCMPSD_128_0x1E(mem)
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 @@ VPSHUFB_128(reg)
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 @@ VPSHUFB_128(mem)
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 @@ VPSHUFB_128(reg)
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 @@ VPSHUFB_128(mem)
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 @@ VPSHUFB_128(reg)
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 @@ VPSHUFB_128(mem)
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 @@ VCVTTSD2SI_32(reg)
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 @@ VCVTTSD2SI_32(mem)
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 @@ VCVTTSD2SI_32(reg)
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 @@ VCVTTSD2SI_32(mem)
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 @@ VCVTTSD2SI_32(reg)
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 @@ VCVTTSD2SI_32(mem)
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 @@ VCVTTSD2SI_64(reg)
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 @@ VCVTTSD2SI_64(mem)
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 @@ VCVTTSD2SI_64(reg)
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 @@ VCVTTSD2SI_64(mem)
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 @@ VCVTTSD2SI_64(reg)
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 @@ VCVTTSD2SI_64(mem)
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 @@ VCVTSI2SS_64(reg)
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 @@ VCVTSI2SS_64(mem)
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 @@ VCVTSI2SS_64(reg)
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 @@ VCVTSI2SS_64(mem)
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 @@ VCVTSI2SS_64(reg)
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 @@ VCVTSI2SS_64(mem)
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 @@ VCVTSI2SD_64(reg)
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 @@ VCVTSI2SD_64(mem)
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 @@ VCVTSI2SD_64(reg)
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 @@ VCVTSI2SD_64(mem)
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 @@ VCVTSI2SD_64(reg)
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 @@ VCVTSI2SD_64(mem)
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 @@ VCVTSI2SD_32(reg)
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 @@ VCVTSI2SD_32(mem)
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 @@ VCVTSI2SD_32(reg)
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 @@ VCVTSI2SD_32(mem)
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 @@ VCVTSI2SD_32(reg)
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 @@ VCVTSI2SD_32(mem)
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 @@ VPOR_128(reg)
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 @@ VPOR_128(mem)
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 @@ VPOR_128(reg)
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 @@ VPOR_128(mem)
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 @@ VPOR_128(reg)
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 @@ VPOR_128(mem)
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 @@ VPXOR_128(reg)
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 @@ VPXOR_128(mem)
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 @@ VPXOR_128(reg)
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 @@ VPXOR_128(mem)
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 @@ VPXOR_128(reg)
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 @@ VPXOR_128(mem)
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 @@ VPSUBB_128(reg)
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 @@ VPSUBB_128(mem)
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 @@ VPSUBB_128(reg)
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 @@ VPSUBB_128(mem)
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 @@ VPSUBB_128(reg)
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 @@ VPSUBB_128(mem)
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 @@ VPSUBD_128(reg)
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 @@ VPSUBD_128(mem)
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 @@ VPSUBD_128(reg)
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 @@ VPSUBD_128(mem)
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 @@ VPSUBD_128(reg)
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 @@ VPSUBD_128(mem)
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 @@ VPADDD_128(reg)
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 @@ VPADDD_128(mem)
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 @@ VPADDD_128(reg)
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 @@ VPADDD_128(mem)
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 @@ VPADDD_128(reg)
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 @@ VPADDD_128(mem)
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 @@ VPMOVZXBW_128(reg)
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 @@ VPMOVZXBW_128(mem)
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 @@ VPMOVZXBW_128(reg)
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 @@ VPMOVZXBW_128(mem)
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 @@ VPMOVZXBW_128(reg)
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 @@ VPMOVZXBW_128(mem)
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 @@ VPMOVZXWD_128(reg)
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 @@ VPMOVZXWD_128(mem)
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 @@ VPMOVZXWD_128(reg)
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 @@ VPMOVZXWD_128(mem)
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 @@ VPMOVZXWD_128(reg)
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 @@ VPMOVZXWD_128(mem)
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 @@ VPBLENDVB_128(reg)
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 @@ VPBLENDVB_128(mem)
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 @@ VPBLENDVB_128(reg)
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 @@ VPBLENDVB_128(mem)
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 @@ VPBLENDVB_128(reg)
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 @@ VPBLENDVB_128(mem)
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 @@ VPMINSD_128(reg)
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 @@ VPMINSD_128(mem)
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 @@ VPMINSD_128(reg)
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 @@ VPMINSD_128(mem)
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 @@ VPMINSD_128(reg)
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 @@ VPMINSD_128(mem)
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 @@ VPMAXSD_128(reg)
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 @@ VPMAXSD_128(mem)
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 @@ VPMAXSD_128(reg)
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 @@ VPMAXSD_128(mem)
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 @@ VPMAXSD_128(reg)
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 @@ VPMAXSD_128(mem)
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 @@ VANDPD_128(reg)
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 @@ VANDPD_128(mem)
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 @@ VANDPD_128(reg)
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 @@ VANDPD_128(mem)
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 @@ VANDPD_128(reg)
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 @@ VANDPD_128(mem)
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 @@ VMULPD_256(reg)
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 @@ VMULPD_256(mem)
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 @@ VMULPD_256(reg)
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 @@ VMULPD_256(mem)
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 @@ VMULPD_256(reg)
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 @@ VMULPD_256(mem)
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 @@ VMOVUPD_EtoG_128(reg)
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 @@ VMOVUPD_EtoG_128(mem)
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 @@ VMOVUPD_EtoG_128(reg)
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 @@ VMOVUPD_EtoG_128(mem)
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 @@ VMOVUPD_EtoG_128(reg)
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 @@ VMOVUPD_EtoG_128(mem)
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 @@ VADDPD_256(reg)
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 @@ VADDPD_256(mem)
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 @@ VADDPD_256(reg)
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 @@ VADDPD_256(mem)
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 @@ VADDPD_256(reg)
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 @@ VADDPD_256(mem)
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 @@ VSUBPD_256(reg)
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 @@ VSUBPD_256(mem)
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 @@ VSUBPD_256(reg)
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 @@ VSUBPD_256(mem)
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 @@ VSUBPD_256(reg)
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 @@ VSUBPD_256(mem)
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 @@ VDIVPD_256(reg)
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 @@ VDIVPD_256(mem)
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 @@ VDIVPD_256(reg)
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 @@ VDIVPD_256(mem)
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 @@ VDIVPD_256(reg)
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 @@ VDIVPD_256(mem)
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 @@ VPCMPEQQ_128(reg)
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 @@ VPCMPEQQ_128(mem)
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 @@ VPCMPEQQ_128(reg)
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 @@ VPCMPEQQ_128(mem)
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 @@ VPCMPEQQ_128(reg)
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 @@ VPCMPEQQ_128(mem)
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 @@ VSUBPD_128(reg)
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 @@ VSUBPD_128(mem)
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 @@ VSUBPD_128(reg)
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 @@ VSUBPD_128(mem)
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 @@ VSUBPD_128(reg)
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 @@ VSUBPD_128(mem)
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 @@ VADDPD_128(reg)
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 @@ VADDPD_128(mem)
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 @@ VADDPD_128(reg)
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 @@ VADDPD_128(mem)
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 @@ VADDPD_128(reg)
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 @@ VADDPD_128(mem)
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 @@ VUNPCKLPD_128(reg)
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 @@ VUNPCKLPD_128(mem)
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 @@ VUNPCKLPD_128(reg)
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 @@ VUNPCKLPD_128(mem)
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 @@ VUNPCKLPD_128(reg)
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 @@ VUNPCKLPD_128(mem)
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 @@ VUNPCKHPD_128(reg)
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 @@ VUNPCKHPD_128(mem)
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 @@ VUNPCKHPD_128(reg)
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 @@ VUNPCKHPD_128(mem)
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 @@ VUNPCKHPD_128(reg)
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 @@ VUNPCKHPD_128(mem)
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 @@ VUNPCKHPS_128(reg)
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 @@ VUNPCKHPS_128(mem)
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 @@ VUNPCKHPS_128(reg)
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 @@ VUNPCKHPS_128(mem)
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 @@ VUNPCKHPS_128(reg)
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 @@ VUNPCKHPS_128(mem)
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 @@ VMOVUPS_EtoG_128(reg)
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 @@ VMOVUPS_EtoG_128(mem)
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 @@ VMOVUPS_EtoG_128(reg)
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 @@ VMOVUPS_EtoG_128(mem)
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 @@ VMOVUPS_EtoG_128(reg)
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 @@ VMOVUPS_EtoG_128(mem)
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 @@ VADDPS_256(reg)
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 @@ VADDPS_256(mem)
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 @@ VADDPS_256(reg)
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 @@ VADDPS_256(mem)
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 @@ VADDPS_256(reg)
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 @@ VADDPS_256(mem)
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 @@ VSUBPS_256(reg)
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 @@ VSUBPS_256(mem)
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 @@ VSUBPS_256(reg)
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 @@ VSUBPS_256(mem)
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 @@ VSUBPS_256(reg)
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 @@ VSUBPS_256(mem)
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 @@ VMULPS_256(reg)
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 @@ VMULPS_256(mem)
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 @@ VMULPS_256(reg)
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 @@ VMULPS_256(mem)
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 @@ VMULPS_256(reg)
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 @@ VMULPS_256(mem)
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 @@ VDIVPS_256(reg)
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 @@ VDIVPS_256(mem)
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 @@ VDIVPS_256(reg)
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 @@ VDIVPS_256(mem)
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 @@ VDIVPS_256(reg)
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 @@ VDIVPS_256(mem)
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 @@ VPCMPGTQ_128(reg)
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 @@ VPCMPGTQ_128(mem)
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 @@ VPCMPGTQ_128(reg)
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 @@ VPCMPGTQ_128(mem)
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 @@ VPCMPGTQ_128(reg)
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 @@ VPCMPGTQ_128(mem)
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 @@ VPEXTRQ_128_0x0(reg)
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 @@ VPEXTRQ_128_0x0(mem)
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 @@ VPEXTRQ_128_0x0(reg)
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 @@ VPEXTRQ_128_0x0(mem)
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 @@ VPEXTRQ_128_0x0(reg)
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 @@ VPEXTRQ_128_0x0(mem)
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 @@ VPEXTRQ_128_0x1(reg)
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 @@ VPEXTRQ_128_0x1(mem)
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 @@ VPEXTRQ_128_0x1(reg)
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 @@ VPEXTRQ_128_0x1(mem)
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 @@ VPEXTRQ_128_0x1(reg)
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 @@ VPEXTRQ_128_0x1(mem)
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 @@ VPSRLQ_0x05_128(reg)
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 @@ VPSRLQ_0x05_128(mem)
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 @@ VPSRLQ_0x05_128(reg)
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 @@ VPSRLQ_0x05_128(mem)
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 @@ VPSRLQ_0x05_128(reg)
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 @@ VPSRLQ_0x05_128(mem)
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 @@ VPMULUDQ_128(reg)
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 @@ VPMULUDQ_128(mem)
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 @@ VPMULUDQ_128(reg)
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 @@ VPMULUDQ_128(mem)
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 @@ VPMULUDQ_128(reg)
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 @@ VPMULUDQ_128(mem)
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 @@ VPSLLQ_0x05_128(reg)
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 @@ VPSLLQ_0x05_128(mem)
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 @@ VPSLLQ_0x05_128(reg)
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 @@ VPSLLQ_0x05_128(mem)
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 @@ VPSLLQ_0x05_128(reg)
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 @@ VPSLLQ_0x05_128(mem)
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 @@ VPMAXUD_128(reg)
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 @@ VPMAXUD_128(mem)
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 @@ VPMAXUD_128(reg)
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 @@ VPMAXUD_128(mem)
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 @@ VPMAXUD_128(reg)
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 @@ VPMAXUD_128(mem)
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 @@ VPMINUD_128(reg)
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 @@ VPMINUD_128(mem)
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 @@ VPMINUD_128(reg)
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 @@ VPMINUD_128(mem)
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 @@ VPMINUD_128(reg)
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 @@ VPMINUD_128(mem)
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 @@ VPMULLD_128(reg)
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 @@ VPMULLD_128(mem)
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 @@ VPMULLD_128(reg)
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 @@ VPMULLD_128(mem)
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 @@ VPMULLD_128(reg)
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 @@ VPMULLD_128(mem)
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 @@ VPMAXUW_128(reg)
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 @@ VPMAXUW_128(mem)
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 @@ VPMAXUW_128(reg)
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 @@ VPMAXUW_128(mem)
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 @@ VPMAXUW_128(reg)
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 @@ VPMAXUW_128(mem)
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 @@ VPEXTRW_128_EregOnly_toG_0x0(reg)
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 @@ VPEXTRW_128_EregOnly_toG_0x0(mem)
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 @@ VPEXTRW_128_EregOnly_toG_0x0(reg)
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 @@ VPEXTRW_128_EregOnly_toG_0x0(mem)
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 @@ VPEXTRW_128_EregOnly_toG_0x0(reg)
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 @@ VPEXTRW_128_EregOnly_toG_0x0(mem)
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 @@ VPEXTRW_128_EregOnly_toG_0x7(reg)
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 @@ VPEXTRW_128_EregOnly_toG_0x7(mem)
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 @@ VPEXTRW_128_EregOnly_toG_0x7(reg)
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 @@ VPEXTRW_128_EregOnly_toG_0x7(mem)
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 @@ VPEXTRW_128_EregOnly_toG_0x7(reg)
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 @@ VPEXTRW_128_EregOnly_toG_0x7(mem)
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 @@ VPMINUW_128(reg)
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 @@ VPMINUW_128(mem)
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 @@ VPMINUW_128(reg)
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 @@ VPMINUW_128(mem)
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 @@ VPMINUW_128(reg)
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 @@ VPMINUW_128(mem)
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 @@ VPHMINPOSUW_128(reg)
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 @@ VPHMINPOSUW_128(mem)
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 @@ VPHMINPOSUW_128(reg)
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 @@ VPHMINPOSUW_128(mem)
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 @@ VPHMINPOSUW_128(reg)
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 @@ VPHMINPOSUW_128(mem)
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 @@ VPMAXSW_128(reg)
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 @@ VPMAXSW_128(mem)
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 @@ VPMAXSW_128(reg)
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 @@ VPMAXSW_128(mem)
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 @@ VPMAXSW_128(reg)
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 @@ VPMAXSW_128(mem)
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 @@ VPMINSW_128(reg)
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 @@ VPMINSW_128(mem)
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 @@ VPMINSW_128(reg)
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 @@ VPMINSW_128(mem)
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 @@ VPMINSW_128(reg)
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 @@ VPMINSW_128(mem)
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 @@ VPMAXUB_128(reg)
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 @@ VPMAXUB_128(mem)
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 @@ VPMAXUB_128(reg)
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 @@ VPMAXUB_128(mem)
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 @@ VPMAXUB_128(reg)
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 @@ VPMAXUB_128(mem)
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 @@ VPEXTRB_GtoE_128_0x0(reg)
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 @@ VPEXTRB_GtoE_128_0x0(mem)
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 @@ VPEXTRB_GtoE_128_0x0(reg)
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 @@ VPEXTRB_GtoE_128_0x0(mem)
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 @@ VPEXTRB_GtoE_128_0x0(reg)
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 @@ VPEXTRB_GtoE_128_0x0(mem)
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 @@ VPEXTRB_GtoE_128_0x1(reg)
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 @@ VPEXTRB_GtoE_128_0x1(mem)
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 @@ VPEXTRB_GtoE_128_0x1(reg)
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 @@ VPEXTRB_GtoE_128_0x1(mem)
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 @@ VPEXTRB_GtoE_128_0x1(reg)
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 @@ VPEXTRB_GtoE_128_0x1(mem)
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 @@ VPEXTRB_GtoE_128_0x2(reg)
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 @@ VPEXTRB_GtoE_128_0x2(mem)
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 @@ VPEXTRB_GtoE_128_0x2(reg)
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 @@ VPEXTRB_GtoE_128_0x2(mem)
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 @@ VPEXTRB_GtoE_128_0x2(reg)
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 @@ VPEXTRB_GtoE_128_0x2(mem)
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 @@ VPEXTRB_GtoE_128_0x3(reg)
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 @@ VPEXTRB_GtoE_128_0x3(mem)
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 @@ VPEXTRB_GtoE_128_0x3(reg)
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 @@ VPEXTRB_GtoE_128_0x3(mem)
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 @@ VPEXTRB_GtoE_128_0x3(reg)
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 @@ VPEXTRB_GtoE_128_0x3(mem)
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 @@ VPEXTRB_GtoE_128_0x4(reg)
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 @@ VPEXTRB_GtoE_128_0x4(mem)
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 @@ VPEXTRB_GtoE_128_0x4(reg)
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 @@ VPEXTRB_GtoE_128_0x4(mem)
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 @@ VPEXTRB_GtoE_128_0x4(reg)
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 @@ VPEXTRB_GtoE_128_0x4(mem)
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 @@ VPEXTRB_GtoE_128_0x9(reg)
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 @@ VPEXTRB_GtoE_128_0x9(mem)
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 @@ VPEXTRB_GtoE_128_0x9(reg)
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 @@ VPEXTRB_GtoE_128_0x9(mem)
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 @@ VPEXTRB_GtoE_128_0x9(reg)
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 @@ VPEXTRB_GtoE_128_0x9(mem)
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 @@ VPEXTRB_GtoE_128_0xE(reg)
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 @@ VPEXTRB_GtoE_128_0xE(mem)
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 @@ VPEXTRB_GtoE_128_0xE(reg)
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 @@ VPEXTRB_GtoE_128_0xE(mem)
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 @@ VPEXTRB_GtoE_128_0xE(reg)
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 @@ VPEXTRB_GtoE_128_0xE(mem)
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 @@ VPEXTRB_GtoE_128_0xF(reg)
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 @@ VPEXTRB_GtoE_128_0xF(mem)
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 @@ VPEXTRB_GtoE_128_0xF(reg)
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 @@ VPEXTRB_GtoE_128_0xF(mem)
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 @@ VPEXTRB_GtoE_128_0xF(reg)
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 @@ VPEXTRB_GtoE_128_0xF(mem)
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 @@ VPMINUB_128(reg)
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 @@ VPMINUB_128(mem)
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 @@ VPMINUB_128(reg)
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 @@ VPMINUB_128(mem)
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 @@ VPMINUB_128(reg)
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 @@ VPMINUB_128(mem)
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 @@ VPMAXSB_128(reg)
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 @@ VPMAXSB_128(mem)
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 @@ VPMAXSB_128(reg)
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 @@ VPMAXSB_128(mem)
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 @@ VPMAXSB_128(reg)
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 @@ VPMAXSB_128(mem)
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 @@ VPMINSB_128(reg)
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 @@ VPMINSB_128(mem)
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 @@ VPMINSB_128(reg)
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 @@ VPMINSB_128(mem)
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 @@ VPMINSB_128(reg)
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 @@ VPMINSB_128(mem)
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 @@ VPERM2F128_0x00(reg)
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 @@ VPERM2F128_0x00(mem)
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 @@ VPERM2F128_0x00(reg)
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 @@ VPERM2F128_0x00(mem)
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 @@ VPERM2F128_0x00(reg)
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 @@ VPERM2F128_0x00(mem)
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 @@ VPERM2F128_0xFF(reg)
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 @@ VPERM2F128_0xFF(mem)
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 @@ VPERM2F128_0xFF(reg)
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 @@ VPERM2F128_0xFF(mem)
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 @@ VPERM2F128_0xFF(reg)
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 @@ VPERM2F128_0xFF(mem)
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 @@ VPERM2F128_0x30(reg)
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 @@ VPERM2F128_0x30(mem)
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 @@ VPERM2F128_0x30(reg)
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 @@ VPERM2F128_0x30(mem)
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 @@ VPERM2F128_0x30(reg)
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 @@ VPERM2F128_0x30(mem)
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 @@ VPERM2F128_0x21(reg)
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 @@ VPERM2F128_0x21(mem)
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 @@ VPERM2F128_0x21(reg)
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 @@ VPERM2F128_0x21(mem)
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 @@ VPERM2F128_0x21(reg)
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 @@ VPERM2F128_0x21(mem)
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 @@ VPERM2F128_0x12(reg)
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 @@ VPERM2F128_0x12(mem)
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 @@ VPERM2F128_0x12(reg)
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 @@ VPERM2F128_0x12(mem)
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 @@ VPERM2F128_0x12(reg)
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 @@ VPERM2F128_0x12(mem)
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 @@ VPERM2F128_0x03(reg)
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 @@ VPERM2F128_0x03(mem)
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 @@ VPERM2F128_0x03(reg)
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 @@ VPERM2F128_0x03(mem)
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 @@ VPERM2F128_0x03(reg)
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 @@ VPERM2F128_0x03(mem)
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 @@ VPERM2F128_0x85(reg)
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 @@ VPERM2F128_0x85(mem)
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 @@ VPERM2F128_0x85(reg)
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 @@ VPERM2F128_0x85(mem)
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 @@ VPERM2F128_0x85(reg)
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 @@ VPERM2F128_0x85(mem)
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 @@ VPERM2F128_0x5A(reg)
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 @@ VPERM2F128_0x5A(mem)
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 @@ VPERM2F128_0x5A(reg)
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 @@ VPERM2F128_0x5A(mem)
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 @@ VPERM2F128_0x5A(reg)
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 @@ VPERM2F128_0x5A(mem)
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 @@ VPERMILPD_256_0x0(reg)
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 @@ VPERMILPD_256_0x0(mem)
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 @@ VPERMILPD_256_0x0(reg)
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 @@ VPERMILPD_256_0x0(mem)
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 @@ VPERMILPD_256_0x0(reg)
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 @@ VPERMILPD_256_0x0(mem)
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 @@ VPERMILPD_256_0xF(reg)
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 @@ VPERMILPD_256_0xF(mem)
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 @@ VPERMILPD_256_0xF(reg)
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 @@ VPERMILPD_256_0xF(mem)
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 @@ VPERMILPD_256_0xF(reg)
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 @@ VPERMILPD_256_0xF(mem)
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 @@ VPERMILPD_256_0xA(reg)
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 @@ VPERMILPD_256_0xA(mem)
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 @@ VPERMILPD_256_0xA(reg)
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 @@ VPERMILPD_256_0xA(mem)
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 @@ VPERMILPD_256_0xA(reg)
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 @@ VPERMILPD_256_0xA(mem)
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 @@ VPERMILPD_256_0x5(reg)
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 @@ VPERMILPD_256_0x5(mem)
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 @@ VPERMILPD_256_0x5(reg)
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 @@ VPERMILPD_256_0x5(mem)
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 @@ VPERMILPD_256_0x5(reg)
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 @@ VPERMILPD_256_0x5(mem)
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 @@ VPERMILPD_128_0x0(reg)
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 @@ VPERMILPD_128_0x0(mem)
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 @@ VPERMILPD_128_0x0(reg)
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 @@ VPERMILPD_128_0x0(mem)
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 @@ VPERMILPD_128_0x0(reg)
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 @@ VPERMILPD_128_0x0(mem)
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 @@ VPERMILPD_128_0x3(reg)
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 @@ VPERMILPD_128_0x3(mem)
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 @@ VPERMILPD_128_0x3(reg)
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 @@ VPERMILPD_128_0x3(mem)
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 @@ VPERMILPD_128_0x3(reg)
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 @@ VPERMILPD_128_0x3(mem)
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 @@ VUNPCKLPD_256(reg)
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 @@ VUNPCKLPD_256(mem)
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 @@ VUNPCKLPD_256(reg)
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 @@ VUNPCKLPD_256(mem)
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 @@ VUNPCKLPD_256(reg)
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 @@ VUNPCKLPD_256(mem)
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 @@ VUNPCKHPD_256(reg)
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 @@ VUNPCKHPD_256(mem)
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 @@ VUNPCKHPD_256(reg)
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 @@ VUNPCKHPD_256(mem)
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 @@ VUNPCKHPD_256(reg)
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 @@ VUNPCKHPD_256(mem)
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 @@ VSHUFPS_0x39_256(reg)
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 @@ VSHUFPS_0x39_256(mem)
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 @@ VSHUFPS_0x39_256(reg)
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 @@ VSHUFPS_0x39_256(mem)
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 @@ VSHUFPS_0x39_256(reg)
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 @@ VSHUFPS_0x39_256(mem)
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 @@ VUNPCKLPS_256(reg)
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 @@ VUNPCKLPS_256(mem)
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 @@ VUNPCKLPS_256(reg)
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 @@ VUNPCKLPS_256(mem)
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 @@ VUNPCKLPS_256(reg)
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 @@ VUNPCKLPS_256(mem)
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 @@ VUNPCKHPS_256(reg)
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 @@ VUNPCKHPS_256(mem)
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 @@ VUNPCKHPS_256(reg)
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 @@ VUNPCKHPS_256(mem)
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 @@ VUNPCKHPS_256(reg)
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 @@ VUNPCKHPS_256(mem)
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 @@ VXORPD_256(reg)
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 @@ VXORPD_256(mem)
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 @@ VXORPD_256(reg)
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 @@ VXORPD_256(mem)
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 @@ VXORPD_256(reg)
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 @@ VXORPD_256(mem)
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 @@ VBROADCASTSD_256(reg)
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 @@ VBROADCASTSD_256(mem)
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 @@ VBROADCASTSD_256(reg)
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 @@ VBROADCASTSD_256(mem)
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 @@ VBROADCASTSD_256(reg)
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 @@ VBROADCASTSD_256(mem)
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 @@ VCMPPD_128_0x4(reg)
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 @@ VCMPPD_128_0x4(mem)
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 @@ VCMPPD_128_0x4(reg)
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 @@ VCMPPD_128_0x4(mem)
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 @@ VCMPPD_128_0x4(reg)
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 @@ VCMPPD_128_0x4(mem)
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 @@ VCVTDQ2PD_128(reg)
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 @@ VCVTDQ2PD_128(mem)
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 @@ VCVTDQ2PD_128(reg)
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 @@ VCVTDQ2PD_128(mem)
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 @@ VCVTDQ2PD_128(reg)
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 @@ VCVTDQ2PD_128(mem)
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 @@ VDIVPD_128(reg)
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 @@ VDIVPD_128(mem)
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 @@ VDIVPD_128(reg)
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 @@ VDIVPD_128(mem)
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 @@ VDIVPD_128(reg)
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 @@ VDIVPD_128(mem)
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 @@ VANDPD_256(reg)
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 @@ VANDPD_256(mem)
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 @@ VANDPD_256(reg)
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 @@ VANDPD_256(mem)
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 @@ VANDPD_256(reg)
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 @@ VANDPD_256(mem)
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 @@ VPMOVSXBW_128(reg)
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 @@ VPMOVSXBW_128(mem)
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 @@ VPMOVSXBW_128(reg)
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 @@ VPMOVSXBW_128(mem)
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 @@ VPMOVSXBW_128(reg)
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 @@ VPMOVSXBW_128(mem)
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 @@ VPSUBUSW_128(reg)
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 @@ VPSUBUSW_128(mem)
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 @@ VPSUBUSW_128(reg)
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 @@ VPSUBUSW_128(mem)
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 @@ VPSUBUSW_128(reg)
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 @@ VPSUBUSW_128(mem)
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 @@ VPSUBSW_128(reg)
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 @@ VPSUBSW_128(mem)
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 @@ VPSUBSW_128(reg)
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 @@ VPSUBSW_128(mem)
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 @@ VPSUBSW_128(reg)
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 @@ VPSUBSW_128(mem)
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 @@ VPCMPEQW_128(reg)
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 @@ VPCMPEQW_128(mem)
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 @@ VPCMPEQW_128(reg)
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 @@ VPCMPEQW_128(mem)
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 @@ VPCMPEQW_128(reg)
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 @@ VPCMPEQW_128(mem)
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 @@ VPADDB_128(reg)
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 @@ VPADDB_128(mem)
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 @@ VPADDB_128(reg)
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 @@ VPADDB_128(mem)
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 @@ VPADDB_128(reg)
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 @@ VPADDB_128(mem)
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 @@ VMOVAPS_EtoG_256(reg)
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 @@ VMOVAPS_EtoG_256(mem)
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 @@ VMOVAPS_EtoG_256(reg)
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 @@ VMOVAPS_EtoG_256(mem)
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 @@ VMOVAPS_EtoG_256(reg)
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 @@ VMOVAPS_EtoG_256(mem)
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 @@ VCVTDQ2PD_256(reg)
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 @@ VCVTDQ2PD_256(mem)
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 @@ VCVTDQ2PD_256(reg)
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 @@ VCVTDQ2PD_256(mem)
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 @@ VCVTDQ2PD_256(reg)
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 @@ VCVTDQ2PD_256(mem)
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 @@ VMOVHPD_128_LoadForm(reg)
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 @@ VMOVHPD_128_LoadForm(mem)
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 @@ VMOVHPD_128_LoadForm(reg)
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 @@ VMOVHPD_128_LoadForm(mem)
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 @@ VMOVHPD_128_LoadForm(reg)
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 @@ VMOVHPD_128_LoadForm(mem)
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 @@ VCVTPD2PS_256(reg)
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 @@ VCVTPD2PS_256(mem)
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 @@ VCVTPD2PS_256(reg)
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 @@ VCVTPD2PS_256(mem)
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 @@ VCVTPD2PS_256(reg)
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 @@ VCVTPD2PS_256(mem)
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 @@ VPUNPCKHDQ_128(reg)
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 @@ VPUNPCKHDQ_128(mem)
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 @@ VPUNPCKHDQ_128(reg)
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 @@ VPUNPCKHDQ_128(mem)
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 @@ VPUNPCKHDQ_128(reg)
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 @@ VPUNPCKHDQ_128(mem)
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 @@ VBROADCASTSS_128(reg)
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 @@ VBROADCASTSS_128(mem)
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 @@ VBROADCASTSS_128(reg)
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 @@ VBROADCASTSS_128(mem)
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 @@ VBROADCASTSS_128(reg)
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 @@ VBROADCASTSS_128(mem)
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 @@ VPMOVSXDQ_128(reg)
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 @@ VPMOVSXDQ_128(mem)
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 @@ VPMOVSXDQ_128(reg)
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 @@ VPMOVSXDQ_128(mem)
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 @@ VPMOVSXDQ_128(reg)
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 @@ VPMOVSXDQ_128(mem)
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 @@ VPMOVSXWD_128(reg)
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 @@ VPMOVSXWD_128(mem)
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 @@ VPMOVSXWD_128(reg)
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 @@ VPMOVSXWD_128(mem)
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 @@ VPMOVSXWD_128(reg)
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 @@ VPMOVSXWD_128(mem)
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 @@ VDIVPS_128(reg)
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 @@ VDIVPS_128(mem)
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 @@ VDIVPS_128(reg)
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 @@ VDIVPS_128(mem)
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 @@ VDIVPS_128(reg)
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 @@ VDIVPS_128(mem)
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 @@ VANDPS_256(reg)
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 @@ VANDPS_256(mem)
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 @@ VANDPS_256(reg)
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 @@ VANDPS_256(mem)
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 @@ VANDPS_256(reg)
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 @@ VANDPS_256(mem)
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 @@ VXORPS_256(reg)
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 @@ VXORPS_256(mem)
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 @@ VXORPS_256(reg)
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 @@ VXORPS_256(mem)
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 @@ VXORPS_256(reg)
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 @@ VXORPS_256(mem)
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 @@ VORPS_256(reg)
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 @@ VORPS_256(mem)
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 @@ VORPS_256(reg)
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 @@ VORPS_256(mem)
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 @@ VORPS_256(reg)
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 @@ VORPS_256(mem)
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 @@ VANDNPD_256(reg)
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 @@ VANDNPD_256(mem)
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 @@ VANDNPD_256(reg)
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 @@ VANDNPD_256(mem)
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 @@ VANDNPD_256(reg)
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 @@ VANDNPD_256(mem)
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 @@ VANDNPS_256(reg)
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 @@ VANDNPS_256(mem)
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 @@ VANDNPS_256(reg)
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 @@ VANDNPS_256(mem)
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 @@ VANDNPS_256(reg)
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 @@ VANDNPS_256(mem)
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 @@ VORPD_256(reg)
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 @@ VORPD_256(mem)
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 @@ VORPD_256(reg)
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 @@ VORPD_256(mem)
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 @@ VORPD_256(reg)
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 @@ VORPD_256(mem)
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 @@ VPERMILPS_256_0x0F(reg)
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 @@ VPERMILPS_256_0x0F(mem)
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 @@ VPERMILPS_256_0x0F(reg)
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 @@ VPERMILPS_256_0x0F(mem)
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 @@ VPERMILPS_256_0x0F(reg)
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 @@ VPERMILPS_256_0x0F(mem)
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 @@ VPERMILPS_256_0xFA(reg)
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 @@ VPERMILPS_256_0xFA(mem)
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 @@ VPERMILPS_256_0xFA(reg)
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 @@ VPERMILPS_256_0xFA(mem)
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 @@ VPERMILPS_256_0xFA(reg)
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 @@ VPERMILPS_256_0xFA(mem)
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 @@ VPERMILPS_256_0xA3(reg)
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 @@ VPERMILPS_256_0xA3(mem)
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 @@ VPERMILPS_256_0xA3(reg)
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 @@ VPERMILPS_256_0xA3(mem)
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 @@ VPERMILPS_256_0xA3(reg)
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 @@ VPERMILPS_256_0xA3(mem)
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 @@ VPERMILPS_256_0x5A(reg)
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 @@ VPERMILPS_256_0x5A(mem)
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 @@ VPERMILPS_256_0x5A(reg)
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 @@ VPERMILPS_256_0x5A(mem)
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 @@ VPERMILPS_256_0x5A(reg)
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 @@ VPERMILPS_256_0x5A(mem)
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 @@ VPMULHW_128(reg)
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 @@ VPMULHW_128(mem)
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 @@ VPMULHW_128(reg)
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 @@ VPMULHW_128(mem)
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 @@ VPMULHW_128(reg)
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 @@ VPMULHW_128(mem)
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 @@ VPUNPCKHQDQ_128(reg)
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 @@ VPUNPCKHQDQ_128(mem)
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 @@ VPUNPCKHQDQ_128(reg)
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 @@ VPUNPCKHQDQ_128(mem)
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 @@ VPUNPCKHQDQ_128(reg)
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 @@ VPUNPCKHQDQ_128(mem)
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 @@ VPSRAW_0x05_128(reg)
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 @@ VPSRAW_0x05_128(mem)
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 @@ VPSRAW_0x05_128(reg)
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 @@ VPSRAW_0x05_128(mem)
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 @@ VPSRAW_0x05_128(reg)
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 @@ VPSRAW_0x05_128(mem)
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 @@ VPCMPGTD_128(reg)
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 @@ VPCMPGTD_128(mem)
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 @@ VPCMPGTD_128(reg)
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 @@ VPCMPGTD_128(mem)
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 @@ VPCMPGTD_128(reg)
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 @@ VPCMPGTD_128(mem)
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 @@ VPMOVZXBD_128(reg)
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 @@ VPMOVZXBD_128(mem)
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 @@ VPMOVZXBD_128(reg)
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 @@ VPMOVZXBD_128(mem)
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 @@ VPMOVZXBD_128(reg)
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 @@ VPMOVZXBD_128(mem)
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 @@ VPMOVSXBD_128(reg)
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 @@ VPMOVSXBD_128(mem)
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 @@ VPMOVSXBD_128(reg)
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 @@ VPMOVSXBD_128(mem)
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 @@ VPMOVSXBD_128(reg)
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 @@ VPMOVSXBD_128(mem)
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 @@ VPINSRB_128_1of3(reg)
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 @@ VPINSRB_128_1of3(mem)
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 @@ VPINSRB_128_1of3(reg)
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 @@ VPINSRB_128_1of3(mem)
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 @@ VPINSRB_128_1of3(reg)
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 @@ VPINSRB_128_1of3(mem)
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 @@ VPINSRB_128_2of3(reg)
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 @@ VPINSRB_128_2of3(mem)
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 @@ VPINSRB_128_2of3(reg)
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 @@ VPINSRB_128_2of3(mem)
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 @@ VPINSRB_128_2of3(reg)
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 @@ VPINSRB_128_2of3(mem)
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 @@ VPINSRB_128_3of3(reg)
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 @@ VPINSRB_128_3of3(mem)
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 @@ VPINSRB_128_3of3(reg)
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 @@ VPINSRB_128_3of3(mem)
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 @@ VPINSRB_128_3of3(reg)
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 @@ VPINSRB_128_3of3(mem)
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 @@ VCOMISD_128(reg)
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 @@ VCOMISD_128(mem)
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 @@ VCOMISD_128(reg)
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 @@ VCOMISD_128(mem)
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 @@ VCOMISD_128(reg)
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 @@ VCOMISD_128(mem)
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 @@ VCOMISS_128(reg)
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 @@ VCOMISS_128(mem)
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 @@ VCOMISS_128(reg)
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 @@ VCOMISS_128(mem)
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 @@ VCOMISS_128(reg)
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 @@ VCOMISS_128(mem)
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 @@ VMOVUPS_YMM_to_YMMorMEM(reg)
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 @@ VMOVUPS_YMM_to_YMMorMEM(mem)
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 @@ VMOVUPS_YMM_to_YMMorMEM(reg)
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 @@ VMOVUPS_YMM_to_YMMorMEM(mem)
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 @@ VMOVUPS_YMM_to_YMMorMEM(reg)
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 @@ VMOVUPS_YMM_to_YMMorMEM(mem)
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 @@ VDPPD_128_1of4(reg)
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 @@ VDPPD_128_1of4(mem)
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 @@ VDPPD_128_1of4(reg)
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 @@ VDPPD_128_1of4(mem)
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 @@ VDPPD_128_1of4(reg)
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 @@ VDPPD_128_1of4(mem)
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 @@ VDPPD_128_2of4(reg)
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 @@ VDPPD_128_2of4(mem)
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 @@ VDPPD_128_2of4(reg)
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 @@ VDPPD_128_2of4(mem)
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 @@ VDPPD_128_2of4(reg)
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 @@ VDPPD_128_2of4(mem)
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 @@ VDPPD_128_3of4(reg)
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 @@ VDPPD_128_3of4(mem)
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 @@ VDPPD_128_3of4(reg)
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 @@ VDPPD_128_3of4(mem)
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 @@ VDPPD_128_3of4(reg)
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 @@ VDPPD_128_3of4(mem)
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 @@ VDPPD_128_4of4(reg)
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 @@ VDPPD_128_4of4(mem)
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 @@ VDPPD_128_4of4(reg)
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 @@ VDPPD_128_4of4(mem)
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 @@ VDPPD_128_4of4(reg)
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 @@ VDPPD_128_4of4(mem)
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 @@ VPINSRW_128_1of4(reg)
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 @@ VPINSRW_128_1of4(mem)
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 @@ VPINSRW_128_1of4(reg)
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 @@ VPINSRW_128_1of4(mem)
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 @@ VPINSRW_128_1of4(reg)
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 @@ VPINSRW_128_1of4(mem)
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 @@ VPINSRW_128_2of4(reg)
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 @@ VPINSRW_128_2of4(mem)
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 @@ VPINSRW_128_2of4(reg)
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 @@ VPINSRW_128_2of4(mem)
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 @@ VPINSRW_128_2of4(reg)
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 @@ VPINSRW_128_2of4(mem)
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 @@ VPINSRW_128_3of4(reg)
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 @@ VPINSRW_128_3of4(mem)
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 @@ VPINSRW_128_3of4(reg)
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 @@ VPINSRW_128_3of4(mem)
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 @@ VPINSRW_128_3of4(reg)
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 @@ VPINSRW_128_3of4(mem)
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 @@ VPINSRW_128_4of4(reg)
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 @@ VPINSRW_128_4of4(mem)
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 @@ VPINSRW_128_4of4(reg)
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 @@ VPINSRW_128_4of4(mem)
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 @@ VPINSRW_128_4of4(reg)
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 @@ VPINSRW_128_4of4(mem)
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 @@ VBROADCASTSS_256(reg)
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 @@ VBROADCASTSS_256(mem)
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 @@ VBROADCASTSS_256(reg)
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 @@ VBROADCASTSS_256(mem)
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 @@ VBROADCASTSS_256(reg)
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 @@ VBROADCASTSS_256(mem)
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 @@ VPALIGNR_128_1of3(reg)
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 @@ VPALIGNR_128_1of3(mem)
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 @@ VPALIGNR_128_1of3(reg)
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 @@ VPALIGNR_128_1of3(mem)
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 @@ VPALIGNR_128_1of3(reg)
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 @@ VPALIGNR_128_1of3(mem)
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 @@ VPALIGNR_128_2of3(reg)
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 @@ VPALIGNR_128_2of3(mem)
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 @@ VPALIGNR_128_2of3(reg)
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 @@ VPALIGNR_128_2of3(mem)
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 @@ VPALIGNR_128_2of3(reg)
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 @@ VPALIGNR_128_2of3(mem)
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 @@ VPALIGNR_128_3of3(reg)
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 @@ VPALIGNR_128_3of3(mem)
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 @@ VPALIGNR_128_3of3(reg)
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 @@ VPALIGNR_128_3of3(mem)
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 @@ VPALIGNR_128_3of3(reg)
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 @@ VPALIGNR_128_3of3(mem)
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 @@ VMOVSD_REG_XMM(reg)
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 @@ VMOVSD_REG_XMM(mem)
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 @@ VMOVSD_REG_XMM(reg)
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 @@ VMOVSD_REG_XMM(mem)
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 @@ VMOVSD_REG_XMM(reg)
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 @@ VMOVSD_REG_XMM(mem)
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 @@ VMOVSS_REG_XMM(reg)
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 @@ VMOVSS_REG_XMM(mem)
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 @@ VMOVSS_REG_XMM(reg)
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 @@ VMOVSS_REG_XMM(mem)
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 @@ VMOVSS_REG_XMM(reg)
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 @@ VMOVSS_REG_XMM(mem)
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 @@ VMOVLPD_128_M64_XMM_XMM(reg)
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 @@ VMOVLPD_128_M64_XMM_XMM(mem)
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 @@ VMOVLPD_128_M64_XMM_XMM(reg)
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 @@ VMOVLPD_128_M64_XMM_XMM(mem)
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 @@ VMOVLPD_128_M64_XMM_XMM(reg)
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 @@ VMOVLPD_128_M64_XMM_XMM(mem)
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 @@ VMOVLPD_128_XMM_M64(reg)
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 @@ VMOVLPD_128_XMM_M64(mem)
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 @@ VMOVLPD_128_XMM_M64(reg)
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 @@ VMOVLPD_128_XMM_M64(mem)
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 @@ VMOVLPD_128_XMM_M64(reg)
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 @@ VMOVLPD_128_XMM_M64(mem)
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 @@ VSHUFPD_128_1of2(reg)
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 @@ VSHUFPD_128_1of2(mem)
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 @@ VSHUFPD_128_1of2(reg)
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 @@ VSHUFPD_128_1of2(mem)
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 @@ VSHUFPD_128_1of2(reg)
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 @@ VSHUFPD_128_1of2(mem)
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 @@ VSHUFPD_128_2of2(reg)
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 @@ VSHUFPD_128_2of2(mem)
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 @@ VSHUFPD_128_2of2(reg)
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 @@ VSHUFPD_128_2of2(mem)
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 @@ VSHUFPD_128_2of2(reg)
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 @@ VSHUFPD_128_2of2(mem)
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 @@ VSHUFPD_256_1of2(reg)
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 @@ VSHUFPD_256_1of2(mem)
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 @@ VSHUFPD_256_1of2(reg)
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 @@ VSHUFPD_256_1of2(mem)
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 @@ VSHUFPD_256_1of2(reg)
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 @@ VSHUFPD_256_1of2(mem)
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 @@ VSHUFPD_256_2of2(reg)
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 @@ VSHUFPD_256_2of2(mem)
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 @@ VSHUFPD_256_2of2(reg)
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 @@ VSHUFPD_256_2of2(mem)
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 @@ VSHUFPD_256_2of2(reg)
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 @@ VSHUFPD_256_2of2(mem)
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 @@ VPERMILPS_128_0x00(reg)
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 @@ VPERMILPS_128_0x00(mem)
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 @@ VPERMILPS_128_0x00(reg)
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 @@ VPERMILPS_128_0x00(mem)
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 @@ VPERMILPS_128_0x00(reg)
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 @@ VPERMILPS_128_0x00(mem)
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 @@ VPERMILPS_128_0xFE(reg)
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 @@ VPERMILPS_128_0xFE(mem)
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 @@ VPERMILPS_128_0xFE(reg)
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 @@ VPERMILPS_128_0xFE(mem)
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 @@ VPERMILPS_128_0xFE(reg)
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 @@ VPERMILPS_128_0xFE(mem)
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 @@ VPERMILPS_128_0x30(reg)
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 @@ VPERMILPS_128_0x30(mem)
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 @@ VPERMILPS_128_0x30(reg)
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 @@ VPERMILPS_128_0x30(mem)
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 @@ VPERMILPS_128_0x30(reg)
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 @@ VPERMILPS_128_0x30(mem)
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 @@ VPERMILPS_128_0x21(reg)
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 @@ VPERMILPS_128_0x21(mem)
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 @@ VPERMILPS_128_0x21(reg)
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 @@ VPERMILPS_128_0x21(mem)
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 @@ VPERMILPS_128_0x21(reg)
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 @@ VPERMILPS_128_0x21(mem)
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 @@ VPERMILPS_128_0xD7(reg)
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 @@ VPERMILPS_128_0xD7(mem)
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 @@ VPERMILPS_128_0xD7(reg)
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 @@ VPERMILPS_128_0xD7(mem)
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 @@ VPERMILPS_128_0xD7(reg)
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 @@ VPERMILPS_128_0xD7(mem)
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 @@ VPERMILPS_128_0xB5(reg)
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 @@ VPERMILPS_128_0xB5(mem)
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 @@ VPERMILPS_128_0xB5(reg)
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 @@ VPERMILPS_128_0xB5(mem)
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 @@ VPERMILPS_128_0xB5(reg)
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 @@ VPERMILPS_128_0xB5(mem)
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 @@ VPERMILPS_128_0x85(reg)
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 @@ VPERMILPS_128_0x85(mem)
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 @@ VPERMILPS_128_0x85(reg)
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 @@ VPERMILPS_128_0x85(mem)
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 @@ VPERMILPS_128_0x85(reg)
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 @@ VPERMILPS_128_0x85(mem)
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 @@ VPERMILPS_128_0x29(reg)
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 @@ VPERMILPS_128_0x29(mem)
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 @@ VPERMILPS_128_0x29(reg)
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 @@ VPERMILPS_128_0x29(mem)
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 @@ VPERMILPS_128_0x29(reg)
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 @@ VPERMILPS_128_0x29(mem)
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 @@ VBLENDPS_128_1of3(reg)
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 @@ VBLENDPS_128_1of3(mem)
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 @@ VBLENDPS_128_1of3(reg)
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 @@ VBLENDPS_128_1of3(mem)
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 @@ VBLENDPS_128_1of3(reg)
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 @@ VBLENDPS_128_1of3(mem)
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 @@ VBLENDPS_128_2of3(reg)
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 @@ VBLENDPS_128_2of3(mem)
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 @@ VBLENDPS_128_2of3(reg)
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 @@ VBLENDPS_128_2of3(mem)
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 @@ VBLENDPS_128_2of3(reg)
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 @@ VBLENDPS_128_2of3(mem)
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 @@ VBLENDPS_128_3of3(reg)
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 @@ VBLENDPS_128_3of3(mem)
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 @@ VBLENDPS_128_3of3(reg)
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 @@ VBLENDPS_128_3of3(mem)
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 @@ VBLENDPS_128_3of3(reg)
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 @@ VBLENDPS_128_3of3(mem)
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 @@ VBLENDPD_128_1of2(reg)
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 @@ VBLENDPD_128_1of2(mem)
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 @@ VBLENDPD_128_1of2(reg)
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 @@ VBLENDPD_128_1of2(mem)
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 @@ VBLENDPD_128_1of2(reg)
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 @@ VBLENDPD_128_1of2(mem)
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 @@ VBLENDPD_128_2of2(reg)
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 @@ VBLENDPD_128_2of2(mem)
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 @@ VBLENDPD_128_2of2(reg)
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 @@ VBLENDPD_128_2of2(mem)
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 @@ VBLENDPD_128_2of2(reg)
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 @@ VBLENDPD_128_2of2(mem)
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 @@ VBLENDPD_256_1of3(reg)
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 @@ VBLENDPD_256_1of3(mem)
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 @@ VBLENDPD_256_1of3(reg)
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 @@ VBLENDPD_256_1of3(mem)
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 @@ VBLENDPD_256_1of3(reg)
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 @@ VBLENDPD_256_1of3(mem)
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 @@ VBLENDPD_256_2of3(reg)
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 @@ VBLENDPD_256_2of3(mem)
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 @@ VBLENDPD_256_2of3(reg)
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 @@ VBLENDPD_256_2of3(mem)
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 @@ VBLENDPD_256_2of3(reg)
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 @@ VBLENDPD_256_2of3(mem)
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 @@ VBLENDPD_256_3of3(reg)
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 @@ VBLENDPD_256_3of3(mem)
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 @@ VBLENDPD_256_3of3(reg)
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 @@ VBLENDPD_256_3of3(mem)
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 @@ VBLENDPD_256_3of3(reg)
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 @@ VBLENDPD_256_3of3(mem)
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 @@ VPBLENDW_128_0x00(reg)
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 @@ VPBLENDW_128_0x00(mem)
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 @@ VPBLENDW_128_0x00(reg)
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 @@ VPBLENDW_128_0x00(mem)
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 @@ VPBLENDW_128_0x00(reg)
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 @@ VPBLENDW_128_0x00(mem)
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 @@ VPBLENDW_128_0xFE(reg)
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 @@ VPBLENDW_128_0xFE(mem)
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 @@ VPBLENDW_128_0xFE(reg)
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 @@ VPBLENDW_128_0xFE(mem)
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 @@ VPBLENDW_128_0xFE(reg)
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 @@ VPBLENDW_128_0xFE(mem)
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 @@ VPBLENDW_128_0x30(reg)
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 @@ VPBLENDW_128_0x30(mem)
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 @@ VPBLENDW_128_0x30(reg)
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 @@ VPBLENDW_128_0x30(mem)
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 @@ VPBLENDW_128_0x30(reg)
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 @@ VPBLENDW_128_0x30(mem)
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 @@ VPBLENDW_128_0x21(reg)
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 @@ VPBLENDW_128_0x21(mem)
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 @@ VPBLENDW_128_0x21(reg)
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 @@ VPBLENDW_128_0x21(mem)
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 @@ VPBLENDW_128_0x21(reg)
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 @@ VPBLENDW_128_0x21(mem)
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 @@ VPBLENDW_128_0xD7(reg)
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 @@ VPBLENDW_128_0xD7(mem)
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 @@ VPBLENDW_128_0xD7(reg)
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 @@ VPBLENDW_128_0xD7(mem)
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 @@ VPBLENDW_128_0xD7(reg)
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 @@ VPBLENDW_128_0xD7(mem)
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 @@ VPBLENDW_128_0xB5(reg)
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 @@ VPBLENDW_128_0xB5(mem)
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 @@ VPBLENDW_128_0xB5(reg)
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 @@ VPBLENDW_128_0xB5(mem)
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 @@ VPBLENDW_128_0xB5(reg)
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 @@ VPBLENDW_128_0xB5(mem)
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 @@ VPBLENDW_128_0x85(reg)
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 @@ VPBLENDW_128_0x85(mem)
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 @@ VPBLENDW_128_0x85(reg)
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 @@ VPBLENDW_128_0x85(mem)
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 @@ VPBLENDW_128_0x85(reg)
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 @@ VPBLENDW_128_0x85(mem)
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 @@ VPBLENDW_128_0x29(reg)
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 @@ VPBLENDW_128_0x29(mem)
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 @@ VPBLENDW_128_0x29(reg)
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 @@ VPBLENDW_128_0x29(mem)
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 @@ VPBLENDW_128_0x29(reg)
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 @@ VPBLENDW_128_0x29(mem)
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 @@ VMOVUPS_EtoG_256(reg)
08e507d01dc84737
after
41f19698636090a6.abcea3c4aa03b2e6.cb59af80752b6f5f.0a9d56e1d0c7ef91
- ffddbb46f6be9f21.0281e9b6ac298eaf.c97f7fe5977b833a.c40cdfd14d49efa8
- 434bc89420a112db.f893489ecee2eebd.5f4379f642ca1dbf.efb582809b97562f
+ 0000000000000000.0000000000000000.42ca1dbf5f4379f6.efb58280efb58280
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 @@ VMOVUPS_EtoG_256(mem)
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 @@ VMOVUPS_EtoG_256(reg)
cb34c25ff1dcc8d6
after
45b37c900dd2a25d.a89987c0d9041163.f93d29429386140e.e6809fdf4cd93551
- 8b0d2f29ecccd95e.4ac16da0a3651e8e.f79018c9ea5ed155.458137515ae2c710
- a4b0e73acfb1b215.1a4fc88d3bff2db3.5bc5ce50b81dd23c.2342c81a68debd72
+ 0000000000000000.0000000000000000.b81dd23c5bc5ce50.2342c81a2342c81a
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 @@ VMOVUPS_EtoG_256(mem)
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 @@ VMOVUPS_EtoG_256(reg)
f1094f335c67ebd1
after
6df843927c55f170.46779373e6312e96.c01cc601a1ff2ee5.c99cbeb6c3d6e2c3
- f1f4a352edee7f84.0ce7551de070ba4e.b50d3323b4a40463.e342e5c7094a9493
- 177fa6df51586e43.0c436c69d40d4736.5ea7851cab945bf7.0baf6244fd5629bd
+ 0000000000000000.0000000000000000.ab945bf75ea7851c.0baf62440baf6244
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 @@ VMOVUPS_EtoG_256(mem)
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 @@ VSQRTSS_128(reg)
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 @@ VSQRTSS_128(mem)
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 @@ VSQRTSS_128(reg)
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 @@ VSQRTSS_128(mem)
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 @@ VSQRTSS_128(reg)
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 @@ VSQRTSS_128(mem)
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 @@ VSQRTPS_128(reg)
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 @@ VSQRTPS_128(mem)
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 @@ VSQRTPS_128(reg)
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 @@ VSQRTPS_128(mem)
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 @@ VSQRTPS_128(reg)
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 @@ VSQRTPS_128(mem)
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 @@ VSQRTPS_256(reg)
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 @@ VSQRTPS_256(mem)
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 @@ VSQRTPS_256(reg)
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 @@ VSQRTPS_256(mem)
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 @@ VSQRTPS_256(reg)
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 @@ VSQRTPS_256(mem)
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 @@ VSQRTPD_128(reg)
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 @@ VSQRTPD_128(mem)
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 @@ VSQRTPD_128(reg)
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 @@ VSQRTPD_128(mem)
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 @@ VSQRTPD_128(reg)
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 @@ VSQRTPD_128(mem)
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 @@ VSQRTPD_256(reg)
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 @@ VSQRTPD_256(mem)
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 @@ VSQRTPD_256(reg)
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 @@ VSQRTPD_256(mem)
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 @@ VSQRTPD_256(reg)
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 @@ VSQRTPD_256(mem)
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 @@ VRSQRTSS_128(reg)
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 @@ VRSQRTSS_128(mem)
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 @@ VRSQRTSS_128(reg)
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 @@ VRSQRTSS_128(mem)
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 @@ VRSQRTSS_128(reg)
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 @@ VRSQRTSS_128(mem)
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 @@ VRSQRTPS_128(reg)
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 @@ VRSQRTPS_128(mem)
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 @@ VRSQRTPS_128(reg)
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 @@ VRSQRTPS_128(mem)
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 @@ VRSQRTPS_128(reg)
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 @@ VRSQRTPS_128(mem)
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 @@ VRSQRTPS_256(reg)
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 @@ VRSQRTPS_256(mem)
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 @@ VRSQRTPS_256(reg)
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 @@ VRSQRTPS_256(mem)
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 @@ VRSQRTPS_256(reg)
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 @@ VRSQRTPS_256(mem)
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 @@ VMOVDQU_GtoE_256(reg)
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 @@ VMOVDQU_GtoE_256(mem)
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 @@ VMOVDQU_GtoE_256(reg)
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 @@ VMOVDQU_GtoE_256(mem)
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 @@ VMOVDQU_GtoE_256(reg)
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 @@ VMOVDQU_GtoE_256(mem)
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 @@ VCVTPS2PD_256(reg)
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 @@ VCVTPS2PD_256(mem)
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 @@ VCVTPS2PD_256(reg)
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 @@ VCVTPS2PD_256(mem)
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 @@ VCVTPS2PD_256(reg)
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 @@ VCVTPS2PD_256(mem)
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 @@ VCVTTPS2DQ_128(reg)
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 @@ VCVTTPS2DQ_128(mem)
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 @@ VCVTTPS2DQ_128(reg)
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 @@ VCVTTPS2DQ_128(mem)
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 @@ VCVTTPS2DQ_128(reg)
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 @@ VCVTTPS2DQ_128(mem)
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 @@ VCVTTPS2DQ_256(reg)
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 @@ VCVTTPS2DQ_256(mem)
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 @@ VCVTTPS2DQ_256(reg)
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 @@ VCVTTPS2DQ_256(mem)
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 @@ VCVTTPS2DQ_256(reg)
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 @@ VCVTTPS2DQ_256(mem)
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 @@ VCVTDQ2PS_128(reg)
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 @@ VCVTDQ2PS_128(mem)
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 @@ VCVTDQ2PS_128(reg)
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 @@ VCVTDQ2PS_128(mem)
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 @@ VCVTDQ2PS_128(reg)
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 @@ VCVTDQ2PS_128(mem)
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 @@ VCVTDQ2PS_256(reg)
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 @@ VCVTDQ2PS_256(mem)
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 @@ VCVTDQ2PS_256(reg)
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 @@ VCVTDQ2PS_256(mem)
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 @@ VCVTDQ2PS_256(reg)
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 @@ VCVTDQ2PS_256(mem)
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 @@ VCVTTPD2DQ_128(reg)
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 @@ VCVTTPD2DQ_128(mem)
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 @@ VCVTTPD2DQ_128(reg)
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 @@ VCVTTPD2DQ_128(mem)
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 @@ VCVTTPD2DQ_128(reg)
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 @@ VCVTTPD2DQ_128(mem)
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 @@ VCVTTPD2DQ_256(reg)
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 @@ VCVTTPD2DQ_256(mem)
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 @@ VCVTTPD2DQ_256(reg)
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 @@ VCVTTPD2DQ_256(mem)
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 @@ VCVTTPD2DQ_256(reg)
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 @@ VCVTTPD2DQ_256(mem)
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 @@ VCVTPD2DQ_128(reg)
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 @@ VCVTPD2DQ_128(mem)
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 @@ VCVTPD2DQ_128(reg)
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 @@ VCVTPD2DQ_128(mem)
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 @@ VCVTPD2DQ_128(reg)
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 @@ VCVTPD2DQ_128(mem)
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 @@ VCVTPD2DQ_256(reg)
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 @@ VCVTPD2DQ_256(mem)
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 @@ VCVTPD2DQ_256(reg)
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 @@ VCVTPD2DQ_256(mem)
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 @@ VCVTPD2DQ_256(reg)
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 @@ VCVTPD2DQ_256(mem)
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 @@ VMOVSLDUP_128(reg)
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 @@ VMOVSLDUP_128(mem)
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 @@ VMOVSLDUP_128(reg)
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 @@ VMOVSLDUP_128(mem)
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 @@ VMOVSLDUP_128(reg)
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 @@ VMOVSLDUP_128(mem)
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 @@ VMOVSLDUP_256(reg)
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 @@ VMOVSLDUP_256(mem)
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 @@ VMOVSLDUP_256(reg)
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 @@ VMOVSLDUP_256(mem)
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 @@ VMOVSLDUP_256(reg)
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 @@ VMOVSLDUP_256(mem)
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 @@ VMOVSHDUP_128(reg)
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 @@ VMOVSHDUP_128(mem)
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 @@ VMOVSHDUP_128(reg)
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 @@ VMOVSHDUP_128(mem)
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 @@ VMOVSHDUP_128(reg)
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 @@ VMOVSHDUP_128(mem)
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 @@ VMOVSHDUP_256(reg)
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 @@ VMOVSHDUP_256(mem)
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 @@ VMOVSHDUP_256(reg)
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 @@ VMOVSHDUP_256(mem)
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 @@ VMOVSHDUP_256(reg)
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 @@ VMOVSHDUP_256(mem)
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 @@ VPERMILPS_VAR_128(reg)
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 @@ VPERMILPS_VAR_128(mem)
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 @@ VPERMILPS_VAR_128(reg)
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 @@ VPERMILPS_VAR_128(mem)
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 @@ VPERMILPS_VAR_128(reg)
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 @@ VPERMILPS_VAR_128(mem)
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 @@ VPERMILPD_VAR_128(reg)
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 @@ VPERMILPD_VAR_128(mem)
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 @@ VPERMILPD_VAR_128(reg)
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 @@ VPERMILPD_VAR_128(mem)
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 @@ VPERMILPD_VAR_128(reg)
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 @@ VPERMILPD_VAR_128(mem)
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 @@ VPERMILPS_VAR_256(reg)
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 @@ VPERMILPS_VAR_256(mem)
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 @@ VPERMILPS_VAR_256(reg)
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 @@ VPERMILPS_VAR_256(mem)
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 @@ VPERMILPS_VAR_256(reg)
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 @@ VPERMILPS_VAR_256(mem)
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 @@ VPERMILPD_VAR_256(reg)
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 @@ VPERMILPD_VAR_256(mem)
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 @@ VPERMILPD_VAR_256(reg)
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 @@ VPERMILPD_VAR_256(mem)
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 @@ VPERMILPD_VAR_256(reg)
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 @@ VPERMILPD_VAR_256(mem)
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 @@ VPSLLW_128(reg)
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 @@ VPSLLW_128(mem)
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 @@ VPSLLW_128(reg)
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 @@ VPSLLW_128(mem)
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 @@ VPSLLW_128(reg)
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 @@ VPSLLW_128(mem)
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 @@ VPSRLW_128(reg)
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 @@ VPSRLW_128(mem)
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 @@ VPSRLW_128(reg)
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 @@ VPSRLW_128(mem)
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 @@ VPSRLW_128(reg)
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 @@ VPSRLW_128(mem)
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 @@ VPSRAW_128(reg)
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 @@ VPSRAW_128(mem)
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 @@ VPSRAW_128(reg)
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 @@ VPSRAW_128(mem)
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 @@ VPSRAW_128(reg)
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 @@ VPSRAW_128(mem)
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 @@ VPSLLD_128(reg)
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 @@ VPSLLD_128(mem)
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 @@ VPSLLD_128(reg)
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 @@ VPSLLD_128(mem)
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 @@ VPSLLD_128(reg)
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 @@ VPSLLD_128(mem)
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 @@ VPSRLD_128(reg)
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 @@ VPSRLD_128(mem)
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 @@ VPSRLD_128(reg)
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 @@ VPSRLD_128(mem)
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 @@ VPSRLD_128(reg)
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 @@ VPSRLD_128(mem)
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 @@ VPSRAD_128(reg)
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 @@ VPSRAD_128(mem)
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 @@ VPSRAD_128(reg)
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 @@ VPSRAD_128(mem)
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 @@ VPSRAD_128(reg)
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 @@ VPSRAD_128(mem)
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 @@ VPSLLQ_128(reg)
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 @@ VPSLLQ_128(mem)
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 @@ VPSLLQ_128(reg)
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 @@ VPSLLQ_128(mem)
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 @@ VPSLLQ_128(reg)
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 @@ VPSLLQ_128(mem)
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 @@ VPSRLQ_128(reg)
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 @@ VPSRLQ_128(mem)
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 @@ VPSRLQ_128(reg)
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 @@ VPSRLQ_128(mem)
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 @@ VPSRLQ_128(reg)
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 @@ VPSRLQ_128(mem)
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 @@ VROUNDPS_128_0x0(reg)
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 @@ VROUNDPS_128_0x0(mem)
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 @@ VROUNDPS_128_0x0(reg)
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 @@ VROUNDPS_128_0x0(mem)
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 @@ VROUNDPS_128_0x0(reg)
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 @@ VROUNDPS_128_0x0(mem)
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 @@ VROUNDPS_128_0x1(reg)
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 @@ VROUNDPS_128_0x1(mem)
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 @@ VROUNDPS_128_0x1(reg)
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 @@ VROUNDPS_128_0x1(mem)
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 @@ VROUNDPS_128_0x1(reg)
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 @@ VROUNDPS_128_0x1(mem)
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 @@ VROUNDPS_128_0x2(reg)
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 @@ VROUNDPS_128_0x2(mem)
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 @@ VROUNDPS_128_0x2(reg)
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 @@ VROUNDPS_128_0x2(mem)
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 @@ VROUNDPS_128_0x2(reg)
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 @@ VROUNDPS_128_0x2(mem)
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 @@ VROUNDPS_128_0x3(reg)
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 @@ VROUNDPS_128_0x3(mem)
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 @@ VROUNDPS_128_0x3(reg)
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 @@ VROUNDPS_128_0x3(mem)
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 @@ VROUNDPS_128_0x3(reg)
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 @@ VROUNDPS_128_0x3(mem)
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 @@ VROUNDPS_128_0x4(reg)
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 @@ VROUNDPS_128_0x4(mem)
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 @@ VROUNDPS_128_0x4(reg)
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 @@ VROUNDPS_128_0x4(mem)
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 @@ VROUNDPS_128_0x4(reg)
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 @@ VROUNDPS_128_0x4(mem)
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 @@ VROUNDPS_256_0x0(reg)
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 @@ VROUNDPS_256_0x0(mem)
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 @@ VROUNDPS_256_0x0(reg)
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 @@ VROUNDPS_256_0x0(mem)
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 @@ VROUNDPS_256_0x0(reg)
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 @@ VROUNDPS_256_0x0(mem)
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 @@ VROUNDPS_256_0x1(reg)
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 @@ VROUNDPS_256_0x1(mem)
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 @@ VROUNDPS_256_0x1(reg)
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 @@ VROUNDPS_256_0x1(mem)
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 @@ VROUNDPS_256_0x1(reg)
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 @@ VROUNDPS_256_0x1(mem)
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 @@ VROUNDPS_256_0x2(reg)
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 @@ VROUNDPS_256_0x2(mem)
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 @@ VROUNDPS_256_0x2(reg)
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 @@ VROUNDPS_256_0x2(mem)
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 @@ VROUNDPS_256_0x2(reg)
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 @@ VROUNDPS_256_0x2(mem)
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 @@ VROUNDPS_256_0x3(reg)
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 @@ VROUNDPS_256_0x3(mem)
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 @@ VROUNDPS_256_0x3(reg)
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 @@ VROUNDPS_256_0x3(mem)
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 @@ VROUNDPS_256_0x3(reg)
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 @@ VROUNDPS_256_0x3(mem)
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 @@ VROUNDPS_256_0x4(reg)
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 @@ VROUNDPS_256_0x4(mem)
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 @@ VROUNDPS_256_0x4(reg)
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 @@ VROUNDPS_256_0x4(mem)
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 @@ VROUNDPS_256_0x4(reg)
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 @@ VROUNDPS_256_0x4(mem)
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 @@ VROUNDPD_128_0x0(reg)
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 @@ VROUNDPD_128_0x0(mem)
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 @@ VROUNDPD_128_0x0(reg)
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 @@ VROUNDPD_128_0x0(mem)
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 @@ VROUNDPD_128_0x0(reg)
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 @@ VROUNDPD_128_0x0(mem)
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 @@ VROUNDPD_128_0x1(reg)
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 @@ VROUNDPD_128_0x1(mem)
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 @@ VROUNDPD_128_0x1(reg)
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 @@ VROUNDPD_128_0x1(mem)
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 @@ VROUNDPD_128_0x1(reg)
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 @@ VROUNDPD_128_0x1(mem)
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 @@ VROUNDPD_128_0x2(reg)
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 @@ VROUNDPD_128_0x2(mem)
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 @@ VROUNDPD_128_0x2(reg)
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 @@ VROUNDPD_128_0x2(mem)
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 @@ VROUNDPD_128_0x2(reg)
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 @@ VROUNDPD_128_0x2(mem)
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 @@ VROUNDPD_128_0x3(reg)
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 @@ VROUNDPD_128_0x3(mem)
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 @@ VROUNDPD_128_0x3(reg)
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 @@ VROUNDPD_128_0x3(mem)
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 @@ VROUNDPD_128_0x3(reg)
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 @@ VROUNDPD_128_0x3(mem)
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 @@ VROUNDPD_128_0x4(reg)
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 @@ VROUNDPD_128_0x4(mem)
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 @@ VROUNDPD_128_0x4(reg)
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 @@ VROUNDPD_128_0x4(mem)
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 @@ VROUNDPD_128_0x4(reg)
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 @@ VROUNDPD_128_0x4(mem)
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 @@ VROUNDPD_256_0x0(reg)
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 @@ VROUNDPD_256_0x0(mem)
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 @@ VROUNDPD_256_0x0(reg)
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 @@ VROUNDPD_256_0x0(mem)
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 @@ VROUNDPD_256_0x0(reg)
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 @@ VROUNDPD_256_0x0(mem)
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 @@ VROUNDPD_256_0x1(reg)
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 @@ VROUNDPD_256_0x1(mem)
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 @@ VROUNDPD_256_0x1(reg)
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 @@ VROUNDPD_256_0x1(mem)
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 @@ VROUNDPD_256_0x1(reg)
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 @@ VROUNDPD_256_0x1(mem)
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 @@ VROUNDPD_256_0x2(reg)
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 @@ VROUNDPD_256_0x2(mem)
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 @@ VROUNDPD_256_0x2(reg)
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 @@ VROUNDPD_256_0x2(mem)
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 @@ VROUNDPD_256_0x2(reg)
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 @@ VROUNDPD_256_0x2(mem)
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 @@ VROUNDPD_256_0x3(reg)
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 @@ VROUNDPD_256_0x3(mem)
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 @@ VROUNDPD_256_0x3(reg)
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 @@ VROUNDPD_256_0x3(mem)
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 @@ VROUNDPD_256_0x3(reg)
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 @@ VROUNDPD_256_0x3(mem)
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 @@ VROUNDPD_256_0x4(reg)
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 @@ VROUNDPD_256_0x4(mem)
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 @@ VROUNDPD_256_0x4(reg)
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 @@ VROUNDPD_256_0x4(mem)
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 @@ VROUNDPD_256_0x4(reg)
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 @@ VROUNDPD_256_0x4(mem)
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 @@ VROUNDSS_0x0(reg)
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 @@ VROUNDSS_0x0(mem)
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 @@ VROUNDSS_0x0(reg)
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 @@ VROUNDSS_0x0(mem)
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 @@ VROUNDSS_0x0(reg)
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 @@ VROUNDSS_0x0(mem)
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 @@ VROUNDSS_0x1(reg)
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 @@ VROUNDSS_0x1(mem)
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 @@ VROUNDSS_0x1(reg)
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 @@ VROUNDSS_0x1(mem)
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 @@ VROUNDSS_0x1(reg)
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 @@ VROUNDSS_0x1(mem)
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 @@ VROUNDSS_0x2(reg)
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 @@ VROUNDSS_0x2(mem)
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 @@ VROUNDSS_0x2(reg)
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 @@ VROUNDSS_0x2(mem)
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 @@ VROUNDSS_0x2(reg)
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 @@ VROUNDSS_0x2(mem)
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 @@ VROUNDSS_0x3(reg)
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 @@ VROUNDSS_0x3(mem)
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 @@ VROUNDSS_0x3(reg)
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 @@ VROUNDSS_0x3(mem)
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 @@ VROUNDSS_0x3(reg)
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 @@ VROUNDSS_0x3(mem)
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 @@ VROUNDSS_0x4(reg)
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 @@ VROUNDSS_0x4(mem)
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 @@ VROUNDSS_0x4(reg)
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 @@ VROUNDSS_0x4(mem)
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 @@ VROUNDSS_0x4(reg)
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 @@ VROUNDSS_0x4(mem)
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 @@ VROUNDSS_0x5(reg)
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 @@ VROUNDSS_0x5(mem)
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 @@ VROUNDSS_0x5(reg)
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 @@ VROUNDSS_0x5(mem)
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 @@ VROUNDSS_0x5(reg)
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 @@ VROUNDSS_0x5(mem)
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 @@ VROUNDSD_0x0(reg)
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 @@ VROUNDSD_0x0(mem)
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 @@ VROUNDSD_0x0(reg)
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 @@ VROUNDSD_0x0(mem)
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 @@ VROUNDSD_0x0(reg)
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 @@ VROUNDSD_0x0(mem)
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 @@ VROUNDSD_0x1(reg)
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 @@ VROUNDSD_0x1(mem)
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 @@ VROUNDSD_0x1(reg)
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 @@ VROUNDSD_0x1(mem)
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 @@ VROUNDSD_0x1(reg)
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 @@ VROUNDSD_0x1(mem)
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 @@ VROUNDSD_0x2(reg)
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 @@ VROUNDSD_0x2(mem)
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 @@ VROUNDSD_0x2(reg)
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 @@ VROUNDSD_0x2(mem)
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 @@ VROUNDSD_0x2(reg)
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 @@ VROUNDSD_0x2(mem)
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 @@ VROUNDSD_0x3(reg)
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 @@ VROUNDSD_0x3(mem)
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 @@ VROUNDSD_0x3(reg)
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 @@ VROUNDSD_0x3(mem)
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 @@ VROUNDSD_0x3(reg)
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 @@ VROUNDSD_0x3(mem)
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 @@ VROUNDSD_0x4(reg)
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 @@ VROUNDSD_0x4(mem)
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 @@ VROUNDSD_0x4(reg)
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 @@ VROUNDSD_0x4(mem)
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 @@ VROUNDSD_0x4(reg)
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 @@ VROUNDSD_0x4(mem)
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 @@ VROUNDSD_0x5(reg)
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 @@ VROUNDSD_0x5(mem)
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 @@ VROUNDSD_0x5(reg)
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 @@ VROUNDSD_0x5(mem)
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 @@ VROUNDSD_0x5(reg)
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 @@ VROUNDSD_0x5(mem)
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 @@ VPTEST_128_1(reg)
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 @@ VPTEST_128_1(mem)
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 @@ VPTEST_128_1(reg)
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 @@ VPTEST_128_1(mem)
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 @@ VPTEST_128_1(reg)
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 @@ VPTEST_128_1(mem)
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 @@ VPTEST_128_2(reg)
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 @@ VPTEST_128_2(mem)
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 @@ VPTEST_128_2(reg)
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 @@ VPTEST_128_2(mem)
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 @@ VPTEST_128_2(reg)
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 @@ VPTEST_128_2(mem)
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 @@ VPTEST_256_1(reg)
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 @@ VPTEST_256_1(mem)
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 @@ VPTEST_256_1(reg)
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 @@ VPTEST_256_1(mem)
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 @@ VPTEST_256_1(reg)
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 @@ VPTEST_256_1(mem)
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 @@ VPTEST_256_2(reg)
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 @@ VPTEST_256_2(mem)
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 @@ VPTEST_256_2(reg)
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 @@ VPTEST_256_2(mem)
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 @@ VPTEST_256_2(reg)
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 @@ VPTEST_256_2(mem)
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 @@ VTESTPS_128_1(reg)
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 @@ VTESTPS_128_1(mem)
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 @@ VTESTPS_128_1(reg)
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 @@ VTESTPS_128_1(mem)
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 @@ VTESTPS_128_1(reg)
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 @@ VTESTPS_128_1(mem)
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 @@ VTESTPS_128_2(reg)
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 @@ VTESTPS_128_2(mem)
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 @@ VTESTPS_128_2(reg)
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 @@ VTESTPS_128_2(mem)
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 @@ VTESTPS_128_2(reg)
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 @@ VTESTPS_128_2(mem)
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 @@ VTESTPS_128_3(reg)
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 @@ VTESTPS_128_3(mem)
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 @@ VTESTPS_128_3(reg)
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 @@ VTESTPS_128_3(mem)
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 @@ VTESTPS_128_3(reg)
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 @@ VTESTPS_128_3(mem)
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 @@ VTESTPS_128_3(reg)
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 @@ VTESTPS_128_3(mem)
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 @@ VTESTPS_128_3(reg)
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 @@ VTESTPS_128_3(mem)
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 @@ VTESTPS_128_3(reg)
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 @@ VTESTPS_128_3(mem)
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 @@ VTESTPS_128_3(reg)
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 @@ VTESTPS_128_3(mem)
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 @@ VTESTPS_128_3(reg)
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 @@ VTESTPS_128_3(mem)
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 @@ VTESTPS_128_3(reg)
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 @@ VTESTPS_128_3(mem)
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 @@ VTESTPS_128_3(reg)
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 @@ VTESTPS_128_3(mem)
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 @@ VTESTPS_256_1(reg)
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 @@ VTESTPS_256_1(mem)
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 @@ VTESTPS_256_1(reg)
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 @@ VTESTPS_256_1(mem)
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 @@ VTESTPS_256_1(reg)
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 @@ VTESTPS_256_1(mem)
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 @@ VTESTPS_256_2(reg)
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 @@ VTESTPS_256_2(mem)
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 @@ VTESTPS_256_2(reg)
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 @@ VTESTPS_256_2(mem)
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 @@ VTESTPS_256_2(reg)
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 @@ VTESTPS_256_2(mem)
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 @@ VTESTPS_256_3(reg)
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 @@ VTESTPS_256_3(mem)
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 @@ VTESTPS_256_3(reg)
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 @@ VTESTPS_256_3(mem)
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 @@ VTESTPS_256_3(reg)
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 @@ VTESTPS_256_3(mem)
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 @@ VTESTPS_256_3(reg)
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 @@ VTESTPS_256_3(mem)
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 @@ VTESTPS_256_3(reg)
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 @@ VTESTPS_256_3(mem)
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 @@ VTESTPS_256_3(reg)
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 @@ VTESTPS_256_3(mem)
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 @@ VTESTPS_256_3(reg)
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 @@ VTESTPS_256_3(mem)
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 @@ VTESTPS_256_3(reg)
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 @@ VTESTPS_256_3(mem)
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 @@ VTESTPS_256_3(reg)
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 @@ VTESTPS_256_3(mem)
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 @@ VTESTPS_256_3(reg)
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 @@ VTESTPS_256_3(mem)
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 @@ VTESTPD_128_1(reg)
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 @@ VTESTPD_128_1(mem)
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 @@ VTESTPD_128_1(reg)
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 @@ VTESTPD_128_1(mem)
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 @@ VTESTPD_128_1(reg)
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 @@ VTESTPD_128_1(mem)
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 @@ VTESTPD_128_2(reg)
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 @@ VTESTPD_128_2(mem)
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 @@ VTESTPD_128_2(reg)
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 @@ VTESTPD_128_2(mem)
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 @@ VTESTPD_128_2(reg)
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 @@ VTESTPD_128_2(mem)
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 @@ VTESTPD_128_3(reg)
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 @@ VTESTPD_128_3(mem)
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 @@ VTESTPD_128_3(reg)
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 @@ VTESTPD_128_3(mem)
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 @@ VTESTPD_128_3(reg)
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 @@ VTESTPD_128_3(mem)
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 @@ VTESTPD_128_3(reg)
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 @@ VTESTPD_128_3(mem)
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 @@ VTESTPD_128_3(reg)
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 @@ VTESTPD_128_3(mem)
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 @@ VTESTPD_128_3(reg)
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 @@ VTESTPD_128_3(mem)
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 @@ VTESTPD_128_3(reg)
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 @@ VTESTPD_128_3(mem)
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 @@ VTESTPD_128_3(reg)
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 @@ VTESTPD_128_3(mem)
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 @@ VTESTPD_128_3(reg)
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 @@ VTESTPD_128_3(mem)
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 @@ VTESTPD_128_3(reg)
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 @@ VTESTPD_128_3(mem)
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 @@ VTESTPD_256_1(reg)
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 @@ VTESTPD_256_1(mem)
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 @@ VTESTPD_256_1(reg)
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 @@ VTESTPD_256_1(mem)
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 @@ VTESTPD_256_1(reg)
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 @@ VTESTPD_256_1(mem)
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 @@ VTESTPD_256_2(reg)
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 @@ VTESTPD_256_2(mem)
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 @@ VTESTPD_256_2(reg)
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 @@ VTESTPD_256_2(mem)
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 @@ VTESTPD_256_2(reg)
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 @@ VTESTPD_256_2(mem)
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 @@ VTESTPD_256_3(reg)
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 @@ VTESTPD_256_3(mem)
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 @@ VTESTPD_256_3(reg)
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 @@ VTESTPD_256_3(mem)
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 @@ VTESTPD_256_3(reg)
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 @@ VTESTPD_256_3(mem)
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 @@ VTESTPD_256_3(reg)
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 @@ VTESTPD_256_3(mem)
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 @@ VTESTPD_256_3(reg)
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 @@ VTESTPD_256_3(mem)
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 @@ VTESTPD_256_3(reg)
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 @@ VTESTPD_256_3(mem)
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 @@ VTESTPD_256_3(reg)
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 @@ VTESTPD_256_3(mem)
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 @@ VTESTPD_256_3(reg)
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 @@ VTESTPD_256_3(mem)
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 @@ VTESTPD_256_3(reg)
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 @@ VTESTPD_256_3(mem)
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 @@ VTESTPD_256_3(reg)
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 @@ VTESTPD_256_3(mem)
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 @@ VBLENDVPS_128(reg)
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 @@ VBLENDVPS_128(mem)
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 @@ VBLENDVPS_128(reg)
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 @@ VBLENDVPS_128(mem)
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 @@ VBLENDVPS_128(reg)
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 @@ VBLENDVPS_128(mem)
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 @@ VBLENDVPS_256(reg)
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 @@ VBLENDVPS_256(mem)
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 @@ VBLENDVPS_256(reg)
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 @@ VBLENDVPS_256(mem)
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 @@ VBLENDVPS_256(reg)
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 @@ VBLENDVPS_256(mem)
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 @@ VBLENDVPD_128(reg)
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 @@ VBLENDVPD_128(mem)
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 @@ VBLENDVPD_128(reg)
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 @@ VBLENDVPD_128(mem)
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 @@ VBLENDVPD_128(reg)
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 @@ VBLENDVPD_128(mem)
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 @@ VBLENDVPD_256(reg)
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 @@ VBLENDVPD_256(mem)
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 @@ VBLENDVPD_256(reg)
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 @@ VBLENDVPD_256(mem)
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 @@ VBLENDVPD_256(reg)
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 @@ VBLENDVPD_256(mem)
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 @@ VPMULDQ_128(reg)
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 @@ VPMULDQ_128(mem)
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 @@ VPMULDQ_128(reg)
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 @@ VPMULDQ_128(mem)
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 @@ VPMULDQ_128(reg)
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 @@ VPMULDQ_128(mem)
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 @@ VCMPPD_256_0x4(reg)
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 @@ VCMPPD_256_0x4(mem)
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 @@ VCMPPD_256_0x4(reg)
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 @@ VCMPPD_256_0x4(mem)
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 @@ VCMPPD_256_0x4(reg)
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 @@ VCMPPD_256_0x4(mem)
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 @@ VCMPPS_128_0x4(reg)
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 @@ VCMPPS_128_0x4(mem)
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 @@ VCMPPS_128_0x4(reg)
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 @@ VCMPPS_128_0x4(mem)
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 @@ VCMPPS_128_0x4(reg)
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 @@ VCMPPS_128_0x4(mem)
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 @@ VCMPPS_256_0x4(reg)
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 @@ VCMPPS_256_0x4(mem)
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 @@ VCMPPS_256_0x4(reg)
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 @@ VCMPPS_256_0x4(mem)
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 @@ VCMPPS_256_0x4(reg)
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 @@ VCMPPS_256_0x4(mem)
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 @@ VPCMPGTB_128(reg)
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 @@ VPCMPGTB_128(mem)
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 @@ VPCMPGTB_128(reg)
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 @@ VPCMPGTB_128(mem)
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 @@ VPCMPGTB_128(reg)
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 @@ VPCMPGTB_128(mem)
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 @@ VPCMPGTW_128(reg)
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 @@ VPCMPGTW_128(mem)
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 @@ VPCMPGTW_128(reg)
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 @@ VPCMPGTW_128(mem)
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 @@ VPCMPGTW_128(reg)
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 @@ VPCMPGTW_128(mem)
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 @@ VPMADDWD_128(reg)
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 @@ VPMADDWD_128(mem)
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 @@ VPMADDWD_128(reg)
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 @@ VPMADDWD_128(mem)
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 @@ VPMADDWD_128(reg)
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 @@ VPMADDWD_128(mem)
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 @@ VADDSUBPS_128(reg)
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 @@ VADDSUBPS_128(mem)
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 @@ VADDSUBPS_128(reg)
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 @@ VADDSUBPS_128(mem)
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 @@ VADDSUBPS_128(reg)
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 @@ VADDSUBPS_128(mem)
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 @@ VADDSUBPS_256(reg)
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 @@ VADDSUBPS_256(mem)
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 @@ VADDSUBPS_256(reg)
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 @@ VADDSUBPS_256(mem)
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 @@ VADDSUBPS_256(reg)
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 @@ VADDSUBPS_256(mem)
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 @@ VADDSUBPD_128(reg)
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 @@ VADDSUBPD_128(mem)
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 @@ VADDSUBPD_128(reg)
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 @@ VADDSUBPD_128(mem)
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 @@ VADDSUBPD_128(reg)
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 @@ VADDSUBPD_128(mem)
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 @@ VADDSUBPD_256(reg)
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 @@ VADDSUBPD_256(mem)
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 @@ VADDSUBPD_256(reg)
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 @@ VADDSUBPD_256(mem)
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 @@ VADDSUBPD_256(reg)
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 @@ VADDSUBPD_256(mem)
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 @@ VCVTSS2SI_64(reg)
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 @@ VCVTSS2SI_64(mem)
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 @@ VCVTSS2SI_64(reg)
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 @@ VCVTSS2SI_64(mem)
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 @@ VCVTSS2SI_64(reg)
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 @@ VCVTSS2SI_64(mem)
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 @@ VCVTSS2SI_32(reg)
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 @@ VCVTSS2SI_32(mem)
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 @@ VCVTSS2SI_32(reg)
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 @@ VCVTSS2SI_32(mem)
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 @@ VCVTSS2SI_32(reg)
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 @@ VCVTSS2SI_32(mem)
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 @@ VCVTSD2SI_32(reg)
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 @@ VCVTSD2SI_32(mem)
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 @@ VCVTSD2SI_32(reg)
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 @@ VCVTSD2SI_32(mem)
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 @@ VCVTSD2SI_32(reg)
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 @@ VCVTSD2SI_32(mem)
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 @@ VCVTSD2SI_64(reg)
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 @@ VCVTSD2SI_64(mem)
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 @@ VCVTSD2SI_64(reg)
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 @@ VCVTSD2SI_64(mem)
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 @@ VCVTSD2SI_64(reg)
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 @@ VCVTSD2SI_64(mem)
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 @@ VDPPS_128_1of4(reg)
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 @@ VDPPS_128_1of4(mem)
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 @@ VDPPS_128_1of4(reg)
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 @@ VDPPS_128_1of4(mem)
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 @@ VDPPS_128_1of4(reg)
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 @@ VDPPS_128_1of4(mem)
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 @@ VDPPS_128_2of4(reg)
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 @@ VDPPS_128_2of4(mem)
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 @@ VDPPS_128_2of4(reg)
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 @@ VDPPS_128_2of4(mem)
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 @@ VDPPS_128_2of4(reg)
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 @@ VDPPS_128_2of4(mem)
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 @@ VDPPS_128_3of4(reg)
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 @@ VDPPS_128_3of4(mem)
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 @@ VDPPS_128_3of4(reg)
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 @@ VDPPS_128_3of4(mem)
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 @@ VDPPS_128_3of4(reg)
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 @@ VDPPS_128_3of4(mem)
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 @@ VDPPS_128_4of4(reg)
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 @@ VDPPS_128_4of4(mem)
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 @@ VDPPS_128_4of4(reg)
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 @@ VDPPS_128_4of4(mem)
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 @@ VDPPS_128_4of4(reg)
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 @@ VDPPS_128_4of4(mem)
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 @@ VDPPS_256_1of4(reg)
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 @@ VDPPS_256_1of4(mem)
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 @@ VDPPS_256_1of4(reg)
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 @@ VDPPS_256_1of4(mem)
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 @@ VDPPS_256_1of4(reg)
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 @@ VDPPS_256_1of4(mem)
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 @@ VDPPS_256_2of4(reg)
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 @@ VDPPS_256_2of4(mem)
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 @@ VDPPS_256_2of4(reg)
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 @@ VDPPS_256_2of4(mem)
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 @@ VDPPS_256_2of4(reg)
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 @@ VDPPS_256_2of4(mem)
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 @@ VDPPS_256_3of4(reg)
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 @@ VDPPS_256_3of4(mem)
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 @@ VDPPS_256_3of4(reg)
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 @@ VDPPS_256_3of4(mem)
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 @@ VDPPS_256_3of4(reg)
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 @@ VDPPS_256_3of4(mem)
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 @@ VDPPS_256_4of4(reg)
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 @@ VDPPS_256_4of4(mem)
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 @@ VDPPS_256_4of4(reg)
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 @@ VDPPS_256_4of4(mem)
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 @@ VDPPS_256_4of4(reg)
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 @@ VDPPS_256_4of4(mem)
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 @@ VHADDPS_128(reg)
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 @@ VHADDPS_128(mem)
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 @@ VHADDPS_128(reg)
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 @@ VHADDPS_128(mem)
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 @@ VHADDPS_128(reg)
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 @@ VHADDPS_128(mem)
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 @@ VHADDPS_256(reg)
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 @@ VHADDPS_256(mem)
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 @@ VHADDPS_256(reg)
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 @@ VHADDPS_256(mem)
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 @@ VHADDPS_256(reg)
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 @@ VHADDPS_256(mem)
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 @@ VHADDPD_128(reg)
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 @@ VHADDPD_128(mem)
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 @@ VHADDPD_128(reg)
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 @@ VHADDPD_128(mem)
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 @@ VHADDPD_128(reg)
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 @@ VHADDPD_128(mem)
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 @@ VHADDPD_256(reg)
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 @@ VHADDPD_256(mem)
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 @@ VHADDPD_256(reg)
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 @@ VHADDPD_256(mem)
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 @@ VHADDPD_256(reg)
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 @@ VHADDPD_256(mem)
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 @@ VHSUBPS_128(reg)
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 @@ VHSUBPS_128(mem)
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 @@ VHSUBPS_128(reg)
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 @@ VHSUBPS_128(mem)
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 @@ VHSUBPS_128(reg)
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 @@ VHSUBPS_128(mem)
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 @@ VHSUBPS_256(reg)
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 @@ VHSUBPS_256(mem)
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 @@ VHSUBPS_256(reg)
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 @@ VHSUBPS_256(mem)
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 @@ VHSUBPS_256(reg)
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 @@ VHSUBPS_256(mem)
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 @@ VHSUBPD_128(reg)
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 @@ VHSUBPD_128(mem)
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 @@ VHSUBPD_128(reg)
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 @@ VHSUBPD_128(mem)
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 @@ VHSUBPD_128(reg)
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 @@ VHSUBPD_128(mem)
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 @@ VHSUBPD_256(reg)
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 @@ VHSUBPD_256(mem)
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 @@ VHSUBPD_256(reg)
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 @@ VHSUBPD_256(mem)
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 @@ VHSUBPD_256(reg)
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 @@ VHSUBPD_256(mem)
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 @@ VEXTRACTPS_0x0(reg)
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 @@ VEXTRACTPS_0x0(mem)
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 @@ VEXTRACTPS_0x0(reg)
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 @@ VEXTRACTPS_0x0(mem)
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 @@ VEXTRACTPS_0x0(reg)
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 @@ VEXTRACTPS_0x0(mem)
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 @@ VEXTRACTPS_0x1(reg)
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 @@ VEXTRACTPS_0x1(mem)
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 @@ VEXTRACTPS_0x1(reg)
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 @@ VEXTRACTPS_0x1(mem)
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 @@ VEXTRACTPS_0x1(reg)
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 @@ VEXTRACTPS_0x1(mem)
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 @@ VEXTRACTPS_0x2(reg)
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 @@ VEXTRACTPS_0x2(mem)
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 @@ VEXTRACTPS_0x2(reg)
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 @@ VEXTRACTPS_0x2(mem)
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 @@ VEXTRACTPS_0x2(reg)
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 @@ VEXTRACTPS_0x2(mem)
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 @@ VEXTRACTPS_0x3(reg)
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 @@ VEXTRACTPS_0x3(mem)
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 @@ VEXTRACTPS_0x3(reg)
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 @@ VEXTRACTPS_0x3(mem)
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 @@ VEXTRACTPS_0x3(reg)
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 @@ VEXTRACTPS_0x3(mem)
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 @@ VLDDQU_128(reg)
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 @@ VLDDQU_128(mem)
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 @@ VLDDQU_128(reg)
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 @@ VLDDQU_128(mem)
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 @@ VLDDQU_128(reg)
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 @@ VLDDQU_128(mem)
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 @@ VLDDQU_256(reg)
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 @@ VLDDQU_256(mem)
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 @@ VLDDQU_256(reg)
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 @@ VLDDQU_256(mem)
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 @@ VLDDQU_256(reg)
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 @@ VLDDQU_256(mem)
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 @@ VMAXPS_256(reg)
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 @@ VMAXPS_256(mem)
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 @@ VMAXPS_256(reg)
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 @@ VMAXPS_256(mem)
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 @@ VMAXPS_256(reg)
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 @@ VMAXPS_256(mem)
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 @@ VMAXPD_128(reg)
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 @@ VMAXPD_128(mem)
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 @@ VMAXPD_128(reg)
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 @@ VMAXPD_128(mem)
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 @@ VMAXPD_128(reg)
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 @@ VMAXPD_128(mem)
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 @@ VMAXPD_256(reg)
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 @@ VMAXPD_256(mem)
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 @@ VMAXPD_256(reg)
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 @@ VMAXPD_256(mem)
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 @@ VMAXPD_256(reg)
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 @@ VMAXPD_256(mem)
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 @@ VMINPS_256(reg)
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 @@ VMINPS_256(mem)
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 @@ VMINPS_256(reg)
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 @@ VMINPS_256(mem)
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 @@ VMINPS_256(reg)
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 @@ VMINPS_256(mem)
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 @@ VMINPD_128(reg)
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 @@ VMINPD_128(mem)
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 @@ VMINPD_128(reg)
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 @@ VMINPD_128(mem)
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 @@ VMINPD_128(reg)
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 @@ VMINPD_128(mem)
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 @@ VMINPD_256(reg)
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 @@ VMINPD_256(mem)
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 @@ VMINPD_256(reg)
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 @@ VMINPD_256(mem)
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 @@ VMINPD_256(reg)
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 @@ VMINPD_256(mem)
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 @@ VMOVHPS_128_StoreForm(reg)
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 @@ VMOVHPS_128_StoreForm(mem)
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 @@ VMOVHPS_128_StoreForm(reg)
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 @@ VMOVHPS_128_StoreForm(mem)
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 @@ VMOVHPS_128_StoreForm(reg)
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 @@ VMOVHPS_128_StoreForm(mem)
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 @@ VMOVNTDQ_256(reg)
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 @@ VMOVNTDQ_256(mem)
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 @@ VMOVNTDQ_256(reg)
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 @@ VMOVNTDQ_256(mem)
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 @@ VMOVNTDQ_256(reg)
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 @@ VMOVNTDQ_256(mem)
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 @@ VMOVHPS_128_LoadForm(reg)
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 @@ VMOVHPS_128_LoadForm(mem)
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 @@ VMOVHPS_128_LoadForm(reg)
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 @@ VMOVHPS_128_LoadForm(mem)
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 @@ VMOVHPS_128_LoadForm(reg)
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 @@ VMOVHPS_128_LoadForm(mem)
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 @@ VMOVNTDQA_128(reg)
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 @@ VMOVNTDQA_128(mem)
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 @@ VMOVNTDQA_128(reg)
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 @@ VMOVNTDQA_128(mem)
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 @@ VMOVNTDQA_128(reg)
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 @@ VMOVNTDQA_128(mem)
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 @@ VMASKMOVDQU_128(reg)
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 @@ VMASKMOVDQU_128(mem)
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 @@ VMASKMOVDQU_128(reg)
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 @@ VMASKMOVDQU_128(mem)
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 @@ VMASKMOVDQU_128(reg)
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 @@ VMASKMOVDQU_128(mem)
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 @@ VMOVMSKPD_128(reg)
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 @@ VMOVMSKPD_128(mem)
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 @@ VMOVMSKPD_128(reg)
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 @@ VMOVMSKPD_128(mem)
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 @@ VMOVMSKPD_128(reg)
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 @@ VMOVMSKPD_128(mem)
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 @@ VMOVMSKPD_256(reg)
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 @@ VMOVMSKPD_256(mem)
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 @@ VMOVMSKPD_256(reg)
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 @@ VMOVMSKPD_256(mem)
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 @@ VMOVMSKPD_256(reg)
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 @@ VMOVMSKPD_256(mem)
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 @@ VMOVMSKPS_128(reg)
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 @@ VMOVMSKPS_128(mem)
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 @@ VMOVMSKPS_128(reg)
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 @@ VMOVMSKPS_128(mem)
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 @@ VMOVMSKPS_128(reg)
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 @@ VMOVMSKPS_128(mem)
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 @@ VMOVMSKPS_256(reg)
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 @@ VMOVMSKPS_256(mem)
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 @@ VMOVMSKPS_256(reg)
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 @@ VMOVMSKPS_256(mem)
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 @@ VMOVMSKPS_256(reg)
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 @@ VMOVMSKPS_256(mem)
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 @@ VMOVNTPD_128(reg)
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 @@ VMOVNTPD_128(mem)
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 @@ VMOVNTPD_128(reg)
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 @@ VMOVNTPD_128(mem)
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 @@ VMOVNTPD_128(reg)
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 @@ VMOVNTPD_128(mem)
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 @@ VMOVNTPD_256(reg)
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 @@ VMOVNTPD_256(mem)
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 @@ VMOVNTPD_256(reg)
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 @@ VMOVNTPD_256(mem)
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 @@ VMOVNTPD_256(reg)
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 @@ VMOVNTPD_256(mem)
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 @@ VMOVNTPS_128(reg)
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 @@ VMOVNTPS_128(mem)
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 @@ VMOVNTPS_128(reg)
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 @@ VMOVNTPS_128(mem)
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 @@ VMOVNTPS_128(reg)
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 @@ VMOVNTPS_128(mem)
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 @@ VMOVNTPS_256(reg)
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 @@ VMOVNTPS_256(mem)
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 @@ VMOVNTPS_256(reg)
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 @@ VMOVNTPS_256(mem)
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 @@ VMOVNTPS_256(reg)
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 @@ VMOVNTPS_256(mem)
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 @@ VPACKSSWB_128(reg)
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 @@ VPACKSSWB_128(mem)
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 @@ VPACKSSWB_128(reg)
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 @@ VPACKSSWB_128(mem)
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 @@ VPACKSSWB_128(reg)
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 @@ VPACKSSWB_128(mem)
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 @@ VPAVGB_128(reg)
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 @@ VPAVGB_128(mem)
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 @@ VPAVGB_128(reg)
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 @@ VPAVGB_128(mem)
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 @@ VPAVGB_128(reg)
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 @@ VPAVGB_128(mem)
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 @@ VPAVGW_128(reg)
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 @@ VPAVGW_128(mem)
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 @@ VPAVGW_128(reg)
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 @@ VPAVGW_128(mem)
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 @@ VPAVGW_128(reg)
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 @@ VPAVGW_128(mem)
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 @@ VPADDSB_128(reg)
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 @@ VPADDSB_128(mem)
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 @@ VPADDSB_128(reg)
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 @@ VPADDSB_128(mem)
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 @@ VPADDSB_128(reg)
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 @@ VPADDSB_128(mem)
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 @@ VPADDSW_128(reg)
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 @@ VPADDSW_128(mem)
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 @@ VPADDSW_128(reg)
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 @@ VPADDSW_128(mem)
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 @@ VPADDSW_128(reg)
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 @@ VPADDSW_128(mem)
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 @@ VPHADDW_128(reg)
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 @@ VPHADDW_128(mem)
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 @@ VPHADDW_128(reg)
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 @@ VPHADDW_128(mem)
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 @@ VPHADDW_128(reg)
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 @@ VPHADDW_128(mem)
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 @@ VPHADDD_128(reg)
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 @@ VPHADDD_128(mem)
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 @@ VPHADDD_128(reg)
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 @@ VPHADDD_128(mem)
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 @@ VPHADDD_128(reg)
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 @@ VPHADDD_128(mem)
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 @@ VPHADDSW_128(reg)
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 @@ VPHADDSW_128(mem)
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 @@ VPHADDSW_128(reg)
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 @@ VPHADDSW_128(mem)
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 @@ VPHADDSW_128(reg)
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 @@ VPHADDSW_128(mem)
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 @@ VPMADDUBSW_128(reg)
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 @@ VPMADDUBSW_128(mem)
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 @@ VPMADDUBSW_128(reg)
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 @@ VPMADDUBSW_128(mem)
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 @@ VPMADDUBSW_128(reg)
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 @@ VPMADDUBSW_128(mem)
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 @@ VPHSUBW_128(reg)
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 @@ VPHSUBW_128(mem)
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 @@ VPHSUBW_128(reg)
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 @@ VPHSUBW_128(mem)
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 @@ VPHSUBW_128(reg)
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 @@ VPHSUBW_128(mem)
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 @@ VPHSUBD_128(reg)
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 @@ VPHSUBD_128(mem)
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 @@ VPHSUBD_128(reg)
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 @@ VPHSUBD_128(mem)
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 @@ VPHSUBD_128(reg)
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 @@ VPHSUBD_128(mem)
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 @@ VPHSUBSW_128(reg)
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 @@ VPHSUBSW_128(mem)
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 @@ VPHSUBSW_128(reg)
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 @@ VPHSUBSW_128(mem)
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 @@ VPHSUBSW_128(reg)
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 @@ VPHSUBSW_128(mem)
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 @@ VPABSB_128(reg)
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 @@ VPABSB_128(mem)
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 @@ VPABSB_128(reg)
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 @@ VPABSB_128(mem)
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 @@ VPABSB_128(reg)
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 @@ VPABSB_128(mem)
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 @@ VPABSW_128(reg)
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 @@ VPABSW_128(mem)
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 @@ VPABSW_128(reg)
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 @@ VPABSW_128(mem)
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 @@ VPABSW_128(reg)
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 @@ VPABSW_128(mem)
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 @@ VPMOVSXBQ_128(reg)
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 @@ VPMOVSXBQ_128(mem)
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 @@ VPMOVSXBQ_128(reg)
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 @@ VPMOVSXBQ_128(mem)
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 @@ VPMOVSXBQ_128(reg)
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 @@ VPMOVSXBQ_128(mem)
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 @@ VPMOVSXWQ_128(reg)
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 @@ VPMOVSXWQ_128(mem)
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 @@ VPMOVSXWQ_128(reg)
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 @@ VPMOVSXWQ_128(mem)
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 @@ VPMOVSXWQ_128(reg)
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 @@ VPMOVSXWQ_128(mem)
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 @@ VPACKUSDW_128(reg)
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 @@ VPACKUSDW_128(mem)
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 @@ VPACKUSDW_128(reg)
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 @@ VPACKUSDW_128(mem)
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 @@ VPACKUSDW_128(reg)
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 @@ VPACKUSDW_128(mem)
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 @@ VPMOVZXBQ_128(reg)
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 @@ VPMOVZXBQ_128(mem)
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 @@ VPMOVZXBQ_128(reg)
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 @@ VPMOVZXBQ_128(mem)
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 @@ VPMOVZXBQ_128(reg)
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 @@ VPMOVZXBQ_128(mem)
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 @@ VPMOVZXWQ_128(reg)
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 @@ VPMOVZXWQ_128(mem)
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 @@ VPMOVZXWQ_128(reg)
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 @@ VPMOVZXWQ_128(mem)
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 @@ VPMOVZXWQ_128(reg)
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 @@ VPMOVZXWQ_128(mem)
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 @@ VPMOVZXDQ_128(reg)
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 @@ VPMOVZXDQ_128(mem)
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 @@ VPMOVZXDQ_128(reg)
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 @@ VPMOVZXDQ_128(mem)
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 @@ VPMOVZXDQ_128(reg)
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 @@ VPMOVZXDQ_128(mem)
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 @@ VMPSADBW_128_0x0(reg)
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 @@ VMPSADBW_128_0x0(mem)
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 @@ VMPSADBW_128_0x0(reg)
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 @@ VMPSADBW_128_0x0(mem)
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 @@ VMPSADBW_128_0x0(reg)
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 @@ VMPSADBW_128_0x0(mem)
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 @@ VMPSADBW_128_0x1(reg)
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 @@ VMPSADBW_128_0x1(mem)
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 @@ VMPSADBW_128_0x1(reg)
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 @@ VMPSADBW_128_0x1(mem)
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 @@ VMPSADBW_128_0x1(reg)
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 @@ VMPSADBW_128_0x1(mem)
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 @@ VMPSADBW_128_0x2(reg)
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 @@ VMPSADBW_128_0x2(mem)
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 @@ VMPSADBW_128_0x2(reg)
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 @@ VMPSADBW_128_0x2(mem)
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 @@ VMPSADBW_128_0x2(reg)
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 @@ VMPSADBW_128_0x2(mem)
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 @@ VMPSADBW_128_0x3(reg)
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 @@ VMPSADBW_128_0x3(mem)
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 @@ VMPSADBW_128_0x3(reg)
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 @@ VMPSADBW_128_0x3(mem)
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 @@ VMPSADBW_128_0x3(reg)
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 @@ VMPSADBW_128_0x3(mem)
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 @@ VMPSADBW_128_0x4(reg)
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 @@ VMPSADBW_128_0x4(mem)
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 @@ VMPSADBW_128_0x4(reg)
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 @@ VMPSADBW_128_0x4(mem)
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 @@ VMPSADBW_128_0x4(reg)
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 @@ VMPSADBW_128_0x4(mem)
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 @@ VMPSADBW_128_0x5(reg)
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 @@ VMPSADBW_128_0x5(mem)
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 @@ VMPSADBW_128_0x5(reg)
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 @@ VMPSADBW_128_0x5(mem)
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 @@ VMPSADBW_128_0x5(reg)
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 @@ VMPSADBW_128_0x5(mem)
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 @@ VMPSADBW_128_0x6(reg)
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 @@ VMPSADBW_128_0x6(mem)
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 @@ VMPSADBW_128_0x6(reg)
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 @@ VMPSADBW_128_0x6(mem)
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 @@ VMPSADBW_128_0x6(reg)
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 @@ VMPSADBW_128_0x6(mem)
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 @@ VMPSADBW_128_0x7(reg)
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 @@ VMPSADBW_128_0x7(mem)
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 @@ VMPSADBW_128_0x7(reg)
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 @@ VMPSADBW_128_0x7(mem)
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 @@ VMPSADBW_128_0x7(reg)
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 @@ VMPSADBW_128_0x7(mem)
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 @@ VMOVDDUP_YMMorMEM256_to_YMM(reg)
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 @@ VMOVDDUP_YMMorMEM256_to_YMM(mem)
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 @@ VMOVDDUP_YMMorMEM256_to_YMM(reg)
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 @@ VMOVDDUP_YMMorMEM256_to_YMM(mem)
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 @@ VMOVDDUP_YMMorMEM256_to_YMM(reg)
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 @@ VMOVDDUP_YMMorMEM256_to_YMM(mem)
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 @@ VMOVLPS_128_M64_XMM_XMM(reg)
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 @@ VMOVLPS_128_M64_XMM_XMM(mem)
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 @@ VMOVLPS_128_M64_XMM_XMM(reg)
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 @@ VMOVLPS_128_M64_XMM_XMM(mem)
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 @@ VMOVLPS_128_M64_XMM_XMM(reg)
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 @@ VMOVLPS_128_M64_XMM_XMM(mem)
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 @@ VMOVLPS_128_XMM_M64(reg)
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 @@ VMOVLPS_128_XMM_M64(mem)
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 @@ VMOVLPS_128_XMM_M64(reg)
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 @@ VMOVLPS_128_XMM_M64(mem)
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 @@ VMOVLPS_128_XMM_M64(reg)
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 @@ VMOVLPS_128_XMM_M64(mem)
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 @@ VRCPSS_128(reg)
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 @@ VRCPSS_128(mem)
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 @@ VRCPSS_128(reg)
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 @@ VRCPSS_128(mem)
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 @@ VRCPSS_128(reg)
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 @@ VRCPSS_128(mem)
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 @@ VRCPPS_128(reg)
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 @@ VRCPPS_128(mem)
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 @@ VRCPPS_128(reg)
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 @@ VRCPPS_128(mem)
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 @@ VRCPPS_128(reg)
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 @@ VRCPPS_128(mem)
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 @@ VRCPPS_256(reg)
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 @@ VRCPPS_256(mem)
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 @@ VRCPPS_256(reg)
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 @@ VRCPPS_256(mem)
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 @@ VRCPPS_256(reg)
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 @@ VRCPPS_256(mem)
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 @@ VPSADBW_128(reg)
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 @@ VPSADBW_128(mem)
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 @@ VPSADBW_128(reg)
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 @@ VPSADBW_128(mem)
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 @@ VPSADBW_128(reg)
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 @@ VPSADBW_128(mem)
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 @@ VPSIGNB_128(reg)
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 @@ VPSIGNB_128(mem)
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 @@ VPSIGNB_128(reg)
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 @@ VPSIGNB_128(mem)
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 @@ VPSIGNB_128(reg)
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 @@ VPSIGNB_128(mem)
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 @@ VPSIGNW_128(reg)
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 @@ VPSIGNW_128(mem)
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 @@ VPSIGNW_128(reg)
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 @@ VPSIGNW_128(mem)
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 @@ VPSIGNW_128(reg)
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 @@ VPSIGNW_128(mem)
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 @@ VPSIGND_128(reg)
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 @@ VPSIGND_128(mem)
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 @@ VPSIGND_128(reg)
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 @@ VPSIGND_128(mem)
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 @@ VPSIGND_128(reg)
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 @@ VPSIGND_128(mem)
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 @@ VPMULHRSW_128(reg)
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 @@ VPMULHRSW_128(mem)
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 @@ VPMULHRSW_128(reg)
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 @@ VPMULHRSW_128(mem)
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 @@ VPMULHRSW_128(reg)
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 @@ VPMULHRSW_128(mem)
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 @@ VBROADCASTF128(reg)
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 @@ VBROADCASTF128(mem)
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 @@ VBROADCASTF128(reg)
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 @@ VBROADCASTF128(mem)
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 @@ VBROADCASTF128(reg)
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 @@ VBROADCASTF128(mem)
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 @@ VPEXTRW_128_0x0(reg)
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 @@ VPEXTRW_128_0x0(mem)
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 @@ VPEXTRW_128_0x0(reg)
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 @@ VPEXTRW_128_0x0(mem)
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 @@ VPEXTRW_128_0x0(reg)
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 @@ VPEXTRW_128_0x0(mem)
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 @@ VPEXTRW_128_0x1(reg)
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 @@ VPEXTRW_128_0x1(mem)
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 @@ VPEXTRW_128_0x1(reg)
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 @@ VPEXTRW_128_0x1(mem)
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 @@ VPEXTRW_128_0x1(reg)
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 @@ VPEXTRW_128_0x1(mem)
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 @@ VPEXTRW_128_0x2(reg)
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 @@ VPEXTRW_128_0x2(mem)
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 @@ VPEXTRW_128_0x2(reg)
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 @@ VPEXTRW_128_0x2(mem)
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 @@ VPEXTRW_128_0x2(reg)
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 @@ VPEXTRW_128_0x2(mem)
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 @@ VPEXTRW_128_0x3(reg)
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 @@ VPEXTRW_128_0x3(mem)
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 @@ VPEXTRW_128_0x3(reg)
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 @@ VPEXTRW_128_0x3(mem)
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 @@ VPEXTRW_128_0x3(reg)
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 @@ VPEXTRW_128_0x3(mem)
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 @@ VPEXTRW_128_0x4(reg)
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 @@ VPEXTRW_128_0x4(mem)
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 @@ VPEXTRW_128_0x4(reg)
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 @@ VPEXTRW_128_0x4(mem)
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 @@ VPEXTRW_128_0x4(reg)
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 @@ VPEXTRW_128_0x4(mem)
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 @@ VPEXTRW_128_0x5(reg)
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 @@ VPEXTRW_128_0x5(mem)
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 @@ VPEXTRW_128_0x5(reg)
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 @@ VPEXTRW_128_0x5(mem)
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 @@ VPEXTRW_128_0x5(reg)
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 @@ VPEXTRW_128_0x5(mem)
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 @@ VPEXTRW_128_0x6(reg)
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 @@ VPEXTRW_128_0x6(mem)
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 @@ VPEXTRW_128_0x6(reg)
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 @@ VPEXTRW_128_0x6(mem)
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 @@ VPEXTRW_128_0x6(reg)
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 @@ VPEXTRW_128_0x6(mem)
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 @@ VPEXTRW_128_0x7(reg)
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 @@ VPEXTRW_128_0x7(mem)
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 @@ VPEXTRW_128_0x7(reg)
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 @@ VPEXTRW_128_0x7(mem)
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 @@ VPEXTRW_128_0x7(reg)
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 @@ VPEXTRW_128_0x7(mem)
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 @@ VAESENC(reg)
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 @@ VAESENC(mem)
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 @@ VAESENC(reg)
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 @@ VAESENC(mem)
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 @@ VAESENC(reg)
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 @@ VAESENC(mem)
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 @@ VAESENCLAST(reg)
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 @@ VAESENCLAST(mem)
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 @@ VAESENCLAST(reg)
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 @@ VAESENCLAST(mem)
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 @@ VAESENCLAST(reg)
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 @@ VAESENCLAST(mem)
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 @@ VAESDEC(reg)
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 @@ VAESDEC(mem)
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 @@ VAESDEC(reg)
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 @@ VAESDEC(mem)
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 @@ VAESDEC(reg)
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 @@ VAESDEC(mem)
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 @@ VAESDECLAST(reg)
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 @@ VAESDECLAST(mem)
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 @@ VAESDECLAST(reg)
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 @@ VAESDECLAST(mem)
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 @@ VAESDECLAST(reg)
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 @@ VAESDECLAST(mem)
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 @@ VAESIMC(reg)
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 @@ VAESIMC(mem)
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 @@ VAESIMC(reg)
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 @@ VAESIMC(mem)
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 @@ VAESIMC(reg)
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 @@ VAESIMC(mem)
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 @@ VAESKEYGENASSIST_0x00(reg)
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 @@ VAESKEYGENASSIST_0x00(mem)
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 @@ VAESKEYGENASSIST_0x00(reg)
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 @@ VAESKEYGENASSIST_0x00(mem)
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 @@ VAESKEYGENASSIST_0x00(reg)
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 @@ VAESKEYGENASSIST_0x00(mem)
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 @@ VAESKEYGENASSIST_0x31(reg)
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 @@ VAESKEYGENASSIST_0x31(mem)
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 @@ VAESKEYGENASSIST_0x31(reg)
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 @@ VAESKEYGENASSIST_0x31(mem)
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 @@ VAESKEYGENASSIST_0x31(reg)
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 @@ VAESKEYGENASSIST_0x31(mem)
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 @@ VAESKEYGENASSIST_0xB2(reg)
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 @@ VAESKEYGENASSIST_0xB2(mem)
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 @@ VAESKEYGENASSIST_0xB2(reg)
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 @@ VAESKEYGENASSIST_0xB2(mem)
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 @@ VAESKEYGENASSIST_0xB2(reg)
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 @@ VAESKEYGENASSIST_0xB2(mem)
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 @@ VAESKEYGENASSIST_0xFF(reg)
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 @@ VAESKEYGENASSIST_0xFF(mem)
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 @@ VAESKEYGENASSIST_0xFF(reg)
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 @@ VAESKEYGENASSIST_0xFF(mem)
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 @@ VAESKEYGENASSIST_0xFF(reg)
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 @@ VAESKEYGENASSIST_0xFF(mem)
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 @@ VPCLMULQDQ_0x00(reg)
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 @@ VPCLMULQDQ_0x00(mem)
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 @@ VPCLMULQDQ_0x00(reg)
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 @@ VPCLMULQDQ_0x00(mem)
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 @@ VPCLMULQDQ_0x00(reg)
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 @@ VPCLMULQDQ_0x00(mem)
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 @@ VPCLMULQDQ_0x01(reg)
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 @@ VPCLMULQDQ_0x01(mem)
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 @@ VPCLMULQDQ_0x01(reg)
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 @@ VPCLMULQDQ_0x01(mem)
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 @@ VPCLMULQDQ_0x01(reg)
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 @@ VPCLMULQDQ_0x01(mem)
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 @@ VPCLMULQDQ_0x10(reg)
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 @@ VPCLMULQDQ_0x10(mem)
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 @@ VPCLMULQDQ_0x10(reg)
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 @@ VPCLMULQDQ_0x10(mem)
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 @@ VPCLMULQDQ_0x10(reg)
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 @@ VPCLMULQDQ_0x10(mem)
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 @@ VPCLMULQDQ_0x11(reg)
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 @@ VPCLMULQDQ_0x11(mem)
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 @@ VPCLMULQDQ_0x11(reg)
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 @@ VPCLMULQDQ_0x11(mem)
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 @@ VPCLMULQDQ_0x11(reg)
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 @@ VPCLMULQDQ_0x11(mem)
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 @@ VPCLMULQDQ_0xFF(reg)
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 @@ VPCLMULQDQ_0xFF(mem)
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 @@ VPCLMULQDQ_0xFF(reg)
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 @@ VPCLMULQDQ_0xFF(mem)
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 @@ VPCLMULQDQ_0xFF(reg)
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 @@ VPCLMULQDQ_0xFF(mem)
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 @@ VCMPSS_128_0x9(reg)
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 @@ VCMPSS_128_0x9(mem)
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 @@ VCMPSS_128_0x9(reg)
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 @@ VCMPSS_128_0x9(mem)
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 @@ VCMPSS_128_0x9(reg)
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 @@ VCMPSS_128_0x9(mem)
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 @@ VMASKMOVPS_128_LoadForm(reg)
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 @@ VMASKMOVPS_128_LoadForm(mem)
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 @@ VMASKMOVPS_128_LoadForm(reg)
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 @@ VMASKMOVPS_128_LoadForm(mem)
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 @@ VMASKMOVPS_128_LoadForm(reg)
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 @@ VMASKMOVPS_128_LoadForm(mem)
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 @@ VMASKMOVPS_256_LoadForm(reg)
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 @@ VMASKMOVPS_256_LoadForm(mem)
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 @@ VMASKMOVPS_256_LoadForm(reg)
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 @@ VMASKMOVPS_256_LoadForm(mem)
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 @@ VMASKMOVPS_256_LoadForm(reg)
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 @@ VMASKMOVPS_256_LoadForm(mem)
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 @@ VMASKMOVPD_128_LoadForm(reg)
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 @@ VMASKMOVPD_128_LoadForm(mem)
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 @@ VMASKMOVPD_128_LoadForm(reg)
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 @@ VMASKMOVPD_128_LoadForm(mem)
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 @@ VMASKMOVPD_128_LoadForm(reg)
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 @@ VMASKMOVPD_128_LoadForm(mem)
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 @@ VMASKMOVPD_256_LoadForm(reg)
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 @@ VMASKMOVPD_256_LoadForm(mem)
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 @@ VMASKMOVPD_256_LoadForm(reg)
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 @@ VMASKMOVPD_256_LoadForm(mem)
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 @@ VMASKMOVPD_256_LoadForm(reg)
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 @@ VMASKMOVPD_256_LoadForm(mem)
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 @@ VMASKMOVPS_128_StoreForm(reg)
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 @@ VMASKMOVPS_128_StoreForm(mem)
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 @@ VMASKMOVPS_128_StoreForm(reg)
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 @@ VMASKMOVPS_128_StoreForm(mem)
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 @@ VMASKMOVPS_128_StoreForm(reg)
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 @@ VMASKMOVPS_128_StoreForm(mem)
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 @@ VMASKMOVPS_256_StoreForm(reg)
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 @@ VMASKMOVPS_256_StoreForm(mem)
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 @@ VMASKMOVPS_256_StoreForm(reg)
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 @@ VMASKMOVPS_256_StoreForm(mem)
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 @@ VMASKMOVPS_256_StoreForm(reg)
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 @@ VMASKMOVPS_256_StoreForm(mem)
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 @@ VMASKMOVPD_128_StoreForm(reg)
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 @@ VMASKMOVPD_128_StoreForm(mem)
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 @@ VMASKMOVPD_128_StoreForm(reg)
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 @@ VMASKMOVPD_128_StoreForm(mem)
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 @@ VMASKMOVPD_128_StoreForm(reg)
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 @@ VMASKMOVPD_128_StoreForm(mem)
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 @@ VMASKMOVPD_256_StoreForm(reg)
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 @@ VMASKMOVPD_256_StoreForm(mem)
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 @@ VMASKMOVPD_256_StoreForm(reg)
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 @@ VMASKMOVPD_256_StoreForm(mem)
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 @@ VMASKMOVPD_256_StoreForm(reg)
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 @@ VMASKMOVPD_256_StoreForm(mem)
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 0f650d1c4..ddd472e87 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 c9509d666..aa4e3679d 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 @@ void randBlock ( Block* b )
\
__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 @@ GEN_test_Ronly(VGATHERDPS_128,
"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 @@ GEN_test_Ronly(VGATHERDPS_256,
"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 @@ GEN_test_Ronly(VGATHERQPS_128_1,
"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 @@ GEN_test_Ronly(VGATHERQPS_256_1,
"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 @@ GEN_test_Ronly(VGATHERQPS_128_2,
"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 @@ GEN_test_Ronly(VGATHERQPS_256_2,
"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 @@ GEN_test_Ronly(VGATHERDPD_128,
"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 @@ GEN_test_Ronly(VGATHERDPD_256,
"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 @@ GEN_test_Ronly(VGATHERQPD_128_1,
"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 @@ GEN_test_Ronly(VGATHERQPD_256_1,
"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 @@ GEN_test_Ronly(VGATHERQPD_128_2,
"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 @@ GEN_test_Ronly(VGATHERQPD_256_2,
"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 @@ GEN_test_Ronly(VPGATHERDD_128,
"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 @@ GEN_test_Ronly(VPGATHERDD_256,
"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 @@ GEN_test_Ronly(VPGATHERQD_128_1,
"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 @@ GEN_test_Ronly(VPGATHERQD_256_1,
"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 @@ GEN_test_Ronly(VPGATHERQD_128_2,
"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 @@ GEN_test_Ronly(VPGATHERQD_256_2,
"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 @@ GEN_test_Ronly(VPGATHERDQ_128,
"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 @@ GEN_test_Ronly(VPGATHERDQ_256,
"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 @@ GEN_test_Ronly(VPGATHERQQ_128_1,
"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 @@ GEN_test_Ronly(VPGATHERQQ_256_1,
"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 @@ GEN_test_Ronly(VPGATHERQQ_128_2,
"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 @@ GEN_test_Ronly(VPGATHERQQ_256_2,
"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 @@ int main ( void )
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 7bfbf95dd..8c949070c 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 d0c4ea039..3af8b60a6 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 @@ asm(
".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 000000000..ce40f21dc
--- /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 b265384c6..8e9e84d0c 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 000000000..ac09af6f4
--- /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/amd64/getseg.stderr.exp b/none/tests/amd64/getseg.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..558358d8a
--- /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 000000000..9d91132a6
--- /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 4b23696b8..603e140cb 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 @@ void randBlock ( Block* b )
\
__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 5b273eb9c..06940121e 100644
--- a/none/tests/amd64/pcmpstr64.c
+++ b/none/tests/amd64/pcmpstr64.c
@@ -204,9 +204,9 @@ Bool pcmpXstrX_WRK ( /*OUT*/V128* resV,
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 @@ void istri_08 ( void )
//////////////////////////////////////////////////////////
// //
+// 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 @@ void istri_40 ( void )
//////////////////////////////////////////////////////////
// //
+// 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 @@ int main ( void )
istri_4A();
istri_3A();
istri_08();
+ istri_18();
istri_1A();
istri_02();
istri_0C();
@@ -1817,6 +1991,7 @@ int main ( void )
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 594f62091..492158613 100644
--- a/none/tests/amd64/pcmpstr64.stdout.exp
+++ b/none/tests/amd64/pcmpstr64.stdout.exp
@@ -88,6 +88,36 @@ istri 08 8000000000000000 aaaaaaaa0aaaaaaa -> 00c10007 00c10007
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 000000000000baba -> 00c1000b 00c1000b
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 e1892677f..0a50c3bbb 100644
--- a/none/tests/amd64/redundantRexW.c
+++ b/none/tests/amd64/redundantRexW.c
@@ -596,6 +596,23 @@ int main ( void )
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 dd1697aa9..94b255a77 100644
--- a/none/tests/amd64/redundantRexW.stdout.exp
+++ b/none/tests/amd64/redundantRexW.stdout.exp
@@ -648,3 +648,29 @@ after "rex.WB subsd -0x8(%r13),%xmm1" (xmms in order [15..0]) {
%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 46e0cdcfd..662dd5200 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 a5e7f1976..872dceafb 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 c3abe010c..5f9fac0d0 100644
--- a/none/tests/amd64/xacq_xrel.c
+++ b/none/tests/amd64/xacq_xrel.c
@@ -165,7 +165,7 @@ void do_cmpxchg8b ( void )
"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 f4ecb4327..0932b22b0 100644
--- a/none/tests/amd64/xacq_xrel.stdout.exp
+++ b/none/tests/amd64/xacq_xrel.stdout.exp
@@ -13,7 +13,7 @@ result for 'btc' is 57d555555f554d55
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 e5b67d4c9..08c7010c0 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 11f42472b..8383af687 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 5d988648b..17a6ece40 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 @@ void try_f64_to_u32 ( double d )
+__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 @@ int main ( void )
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 64e62af4c..bfc003230 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_imm32: 8.99999900000000e+04 -> 0x00000000ffffffff
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 135d64fb7..f06e30b89 100644
--- a/none/tests/arm64/Makefile.am
+++ b/none/tests/arm64/Makefile.am
@@ -22,6 +22,7 @@ AM_CCASFLAGS += @FLAG_M64@
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 fb0c7e6d0..0aba2c8f8 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 @@ static void showBlock ( const char* msg, V128* block, Int nBlock )
}
}
-__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 @@ GEN_UNARY_TEST(xtn2, 16b, 8h)
// 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 @@ int main ( void )
// ======================== 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 @@ int main ( void )
// 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 1b3eb402f..6034807b5 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 @@ typedef unsigned char Bool;
#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 @@ printf("PRFM (immediate)\n");
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 77e2efaf1..397ce08ea 100644
--- a/none/tests/arm64/memory.stdout.exp
+++ b/none/tests/arm64/memory.stdout.exp
@@ -25897,3 +25897,364 @@ prfm pstl3strm, [x5, #56] with x5 = middle_of_block+12, x6=-4
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 25b730bef..f05eb6e4e 100644
--- a/none/tests/async-sigs.c
+++ b/none/tests/async-sigs.c
@@ -22,6 +22,15 @@ static void handler(int sig)
{
}
+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 @@ static void do_kill(int pid, int sig)
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 @@ static void test(int block, int caughtsig, int fatalsig)
// - 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 @@ static void test(int block, int caughtsig, int fatalsig)
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 ec51f036f..3d4d862e6 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 564a2e0fc..cc25a16b9 100644
--- a/none/tests/cmdline1.stdout.exp
+++ b/none/tests/cmdline1.stdout.exp
@@ -47,11 +47,8 @@ usage: valgrind [options] prog-and-args
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 @@ usage: valgrind [options] prog-and-args
--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 @@ usage: valgrind [options] prog-and-args
--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 @@ usage: valgrind [options] prog-and-args
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 4efc42393..580fa1968 100644
--- a/none/tests/cmdline2.stdout.exp
+++ b/none/tests/cmdline2.stdout.exp
@@ -47,11 +47,8 @@ usage: valgrind [options] prog-and-args
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 @@ usage: valgrind [options] prog-and-args
--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 @@ usage: valgrind [options] prog-and-args
--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 @@ usage: valgrind [options] prog-and-args
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 4ee1d82b5..c24fb77ed 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 5cce00cdf..1473e8008 100644
--- a/none/tests/darwin/Makefile.am
+++ b/none/tests/darwin/Makefile.am
@@ -6,12 +6,14 @@ dist_noinst_SCRIPTS = filter_stderr
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 000000000..d7a0ab276
--- /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/darwin/bug228343.stderr.exp b/none/tests/darwin/bug228343.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..f2b5cc1d5
--- /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 000000000..1d4c0d367
--- /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 11a24c58c..2ab8fed20 100644
--- a/none/tests/exec-sigmask.c
+++ b/none/tests/exec-sigmask.c
@@ -19,7 +19,7 @@ static void do_exec(const char *path, const char *arg, const sigset_t *mask)
}
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 000000000..1979811b1
--- /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 e6a30444a..db2be290d 100644
--- a/none/tests/execve.c
+++ b/none/tests/execve.c
@@ -8,11 +8,16 @@ int main(int argc, char **argv)
{
// 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 cbee7e459..81e69082e 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 @@ int main()
#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 994692ada..3c7c40174 100644
--- a/none/tests/fdleak_creat.c
+++ b/none/tests/fdleak_creat.c
@@ -9,7 +9,7 @@ int main (int argc, char **argv)
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 bb1ef4299..931520713 100755
--- a/none/tests/filter_fdleak
+++ b/none/tests/filter_fdleak
@@ -6,6 +6,8 @@ dir=`dirname $0`
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 ed05e7bcc..378ff4487 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 e297921db..57184c0d6 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 @@ int main(int argc, char **argv)
// 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 44b5ace94..f407cb473 100644
--- a/none/tests/linux/Makefile.am
+++ b/none/tests/linux/Makefile.am
@@ -36,3 +36,6 @@ AM_CXXFLAGS += $(AM_FLAG_M3264_PRI)
# 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 88e325592..8d10f1aa9 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 3b9ffd49b..e7b4f298a 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 bfc2503dd..212d7e363 100644
--- a/none/tests/map_unmap.c
+++ b/none/tests/map_unmap.c
@@ -77,7 +77,7 @@ static void nibblemap(void *p)
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 a36d222f9..c521798e9 100644
--- a/none/tests/mips64/load_indexed_instructions.c
+++ b/none/tests/mips64/load_indexed_instructions.c
@@ -67,16 +67,16 @@ const int reg_val[256] = {
};
/*
-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 @@ the macro performs following operations:
"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 @@ int main()
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 5f8f27203..7e8c53446 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: 0xe0, out: 0xfffffffff23a8028
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 072a6f550..af4458043 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: 0xe0, out: 0xfffffffff23a8028
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 f49639a17..8bfae6443 100644
--- a/none/tests/mmap_fcntl_bug.c
+++ b/none/tests/mmap_fcntl_bug.c
@@ -40,7 +40,7 @@ int main(int argc, char *argv[])
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 b2ab7bc73..8105a8d94 100644
--- a/none/tests/mq.c
+++ b/none/tests/mq.c
@@ -64,11 +64,8 @@ int main(int argc, char **argv)
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 @@ int main(int argc, char **argv)
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 e66992cdf..196239e0b 100644
--- a/none/tests/ppc32/Makefile.am
+++ b/none/tests/ppc32/Makefile.am
@@ -9,12 +9,12 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 @@ DFP_FLAG =
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 @@ test_dfp2_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(DFP_FLAG) \
@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 d7d05b3c7..13165fc5f 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 183536b56..d29d397e1 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 a61616cf7..dd846e0d0 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 f1f6c481e..0bf9d8bab 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 f69c126e6..dc9522013 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 81c59f201..b36dbcba6 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 0efe5dfd1..71af5fa64 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 7fe6c16f0..23a1f00ed 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 39168a36a..e806e85e2 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 dac33568b..7688eb8ac 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 9777d0511..0c905d8d9 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 512a21812..29e9d0645 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 7ae01beb8..7783c5e43 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 3519c8a05..e4ccfeeab 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 a4649be9f..8108796a9 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 977c326a5..f25807715 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 4806ccfae..50409b7c2 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 d1faca665..a4f71e262 100644
--- a/none/tests/ppc64/Makefile.am
+++ b/none/tests/ppc64/Makefile.am
@@ -17,7 +17,8 @@ EXTRA_DIST = \
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 @@ EXTRA_DIST = \
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 @@ DFP_FLAG =
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_part2_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(VSX_
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 183536b56..d29d397e1 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 a61616cf7..dd846e0d0 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 f1f6c481e..0bf9d8bab 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 a93060a0b..dc9522013 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 0efe5dfd1..71af5fa64 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 7fe6c16f0..23a1f00ed 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 39168a36a..e806e85e2 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 dac33568b..7688eb8ac 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 9777d0511..0c905d8d9 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 512a21812..29e9d0645 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 7ae01beb8..7783c5e43 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 3519c8a05..e4ccfeeab 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 a4649be9f..8108796a9 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 29eb5eb73..c829384e2 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 @@ int __attribute__ ((noinline)) htm_begin (int r3, int r4)
#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 977c326a5..f25807715 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 9e40083a5..57f89bb45 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 @@ int main (void) {
__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 4806ccfae..50409b7c2 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 9f550e5b7..cfb78d698 100644
--- a/none/tests/procfs-cmdline-exe.c
+++ b/none/tests/procfs-cmdline-exe.c
@@ -98,12 +98,12 @@ int main(int argc, char** argv)
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 61bf34934..8250b271a 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 99a087fd4..34201ef96 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 000000000..8c0c3ead8
--- /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 745a5ff4c..24a35fc0d 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 e8c1e29dc..879a1743a 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 49934f8de..e061f3932 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 4100088bd..6545117e3 100644
--- a/none/tests/s390x/Makefile.am
+++ b/none/tests/s390x/Makefile.am
@@ -8,7 +8,7 @@ INSN_TESTS = clc clcle cvb cvd icm lpr tcxb lam_stam xc mvst add sub mul \
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 @@ INSN_TESTS = clc clcle cvb cvd icm lpr tcxb lam_stam xc mvst add sub mul \
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 @@ EXTRA_DIST = \
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 @@ cu12_1_CFLAGS = $(AM_CFLAGS) -DM3=1
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 000000000..ba99210b5
--- /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 000000000..139597f9c
--- /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 000000000..787c0d8d2
--- /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 000000000..22eb7afab
--- /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 dfa0c8aee..58a94b0dd 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 64e7a47c9..62b6bb7f2 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 47404300d..948bad9de 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 d64bb23b5..ec1a3be93 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 64ed5ee90..970cbedff 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 948fb85d6..e570976b3 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 999aacdbe..e88087682 100644
--- a/none/tests/s390x/rounding-6.c
+++ b/none/tests/s390x/rounding-6.c
@@ -44,6 +44,19 @@ do { \
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 @@ do { \
#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 @@ int main(void)
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 f83455c27..f01a22973 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 [-> nearest even]
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 9fe986bd2..07b4c8e32 100644
--- a/none/tests/scripts/Makefile.am
+++ b/none/tests/scripts/Makefile.am
@@ -7,20 +7,24 @@ dist_noinst_SCRIPTS = \
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 000000000..4b38739c1
--- /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 000000000..3f15067d1
--- /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 000000000..99e1f451c
--- /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
index 43643222e..43643222e 100755
--- a/none/tests/scripts/shell_nointerp1
+++ b/none/tests/scripts/nointerp1
diff --git a/none/tests/scripts/nointerp1.stderr.exp b/none/tests/scripts/nointerp1.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/none/tests/scripts/nointerp1.stderr.exp
diff --git a/none/tests/scripts/shell_nointerp1.stdout.exp b/none/tests/scripts/nointerp1.stdout.exp
index e6dab0adf..e6dab0adf 100644
--- a/none/tests/scripts/shell_nointerp1.stdout.exp
+++ b/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 000000000..fdfbfa07a
--- /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
index 64ac35ea0..64ac35ea0 100755
--- a/none/tests/scripts/shell_nointerp2
+++ b/none/tests/scripts/nointerp2
diff --git a/none/tests/scripts/nointerp2.stderr.exp b/none/tests/scripts/nointerp2.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/none/tests/scripts/nointerp2.stderr.exp
diff --git a/none/tests/scripts/shell_nointerp2.stdout.exp b/none/tests/scripts/nointerp2.stdout.exp
index 22830117b..22830117b 100644
--- a/none/tests/scripts/shell_nointerp2.stdout.exp
+++ b/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 000000000..104b1822e
--- /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
index 9104705f2..9104705f2 100755
--- a/none/tests/scripts/shell_nointerp3
+++ b/none/tests/scripts/nointerp3
diff --git a/none/tests/scripts/nointerp3.stderr.exp b/none/tests/scripts/nointerp3.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/none/tests/scripts/nointerp3.stderr.exp
diff --git a/none/tests/scripts/shell_nointerp3.stdout.exp b/none/tests/scripts/nointerp3.stdout.exp
index 2d5f07538..2d5f07538 100644
--- a/none/tests/scripts/shell_nointerp3.stdout.exp
+++ b/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 000000000..3a0cd3e4d
--- /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 000000000..792d60054
--- /dev/null
+++ b/none/tests/scripts/nointerp4
@@ -0,0 +1 @@
+#
diff --git a/none/tests/scripts/nointerp4.stderr.exp b/none/tests/scripts/nointerp4.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..9cb1be160
--- /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 000000000..b1d201554
--- /dev/null
+++ b/none/tests/scripts/nointerp5
@@ -0,0 +1 @@
+#
diff --git a/none/tests/scripts/nointerp5.stderr.exp b/none/tests/scripts/nointerp5.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..63819ac22
--- /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 000000000..e08a4228f
--- /dev/null
+++ b/none/tests/scripts/relative1
@@ -0,0 +1 @@
+#!./say-hello.helper
diff --git a/none/tests/scripts/relative1.stderr.exp b/none/tests/scripts/relative1.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..ce0136250
--- /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 000000000..0cb93f1c4
--- /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 000000000..ad2732666
--- /dev/null
+++ b/none/tests/scripts/relative2
@@ -0,0 +1 @@
+#! ../scripts/./say-hello.helper
diff --git a/none/tests/scripts/relative2.stderr.exp b/none/tests/scripts/relative2.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..ce0136250
--- /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 000000000..6b0bc764e
--- /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 000000000..21ba68255
--- /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 dc0b8b1ce..5df2ca203 100755
--- a/none/tests/scripts/shell
+++ b/none/tests/scripts/shell
@@ -31,10 +31,10 @@ echo "Execute a valid script with a #! line"
./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 000000000..9866b2e74
--- /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 000000000..5a8229f59
--- /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 000000000..e40fd97c9
--- /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 5a5c5c506..000000000
--- 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 346e34744..000000000
--- 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 7ef940bcd..000000000
--- 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 000000000..1860bf89d
--- /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 000000000..b0d23c298
--- /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 000000000..8e49f7b3e
--- /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 000000000..7ef22e9a4
--- /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 000000000..73bbe5a07
--- /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 000000000..c11c7c51b
--- /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 000000000..b57c03735
--- /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 000000000..084f579a3
--- /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 000000000..6d2f457a2
--- /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/solaris/context_link.stderr.exp b/none/tests/solaris/context_link.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..835e40819
--- /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 000000000..bdcecfd02
--- /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 000000000..9d64b6b5e
--- /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/solaris/context_link2.stderr.exp b/none/tests/solaris/context_link2.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/none/tests/solaris/context_link2.stderr.exp
diff --git a/none/tests/solaris/context_link2.stdout.exp b/none/tests/solaris/context_link2.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..a0a741695
--- /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 000000000..4d206c77e
--- /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/solaris/context_null.stderr.exp b/none/tests/solaris/context_null.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/none/tests/solaris/context_null.stderr.exp
diff --git a/none/tests/solaris/context_null.stdout.exp b/none/tests/solaris/context_null.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..881169681
--- /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 000000000..ff3ade609
--- /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/solaris/context_stack.stderr.exp b/none/tests/solaris/context_stack.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/none/tests/solaris/context_stack.stderr.exp
diff --git a/none/tests/solaris/context_stack.stdout.exp b/none/tests/solaris/context_stack.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..4876b1b75
--- /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 000000000..e5868e5fa
--- /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 000000000..1b45a17c4
--- /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 000000000..5c94dc2b9
--- /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 000000000..3ffdf6db0
--- /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 000000000..807751b9b
--- /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 000000000..5a893a297
--- /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 000000000..449556da0
--- /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 000000000..0ae9313a9
--- /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 000000000..975e95127
--- /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/solaris/mmap_noreserve.stderr.exp b/none/tests/solaris/mmap_noreserve.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..44ea7f1df
--- /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 000000000..915c260e3
--- /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 000000000..d37ecd127
--- /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 000000000..017e9cfbe
--- /dev/null
+++ b/none/tests/solaris/posix_spawn.stderr.exp
@@ -0,0 +1 @@
+posix_spawn: Bad file number
diff --git a/none/tests/solaris/posix_spawn.stdout.exp b/none/tests/solaris/posix_spawn.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..38f7fdd26
--- /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 000000000..6fd6f1301
--- /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 000000000..9d656f733
--- /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 000000000..117dd9fb3
--- /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 000000000..872426e12
--- /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/solaris/proc_aout.stderr.exp b/none/tests/solaris/proc_aout.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..49f3e0131
--- /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 000000000..960e75823
--- /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 000000000..4af8f57c8
--- /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/solaris/proc_auxv.stderr.exp b/none/tests/solaris/proc_auxv.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/none/tests/solaris/proc_auxv.stderr.exp
diff --git a/none/tests/solaris/proc_auxv.stdout.exp b/none/tests/solaris/proc_auxv.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..df3a009a0
--- /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 000000000..a03dbb481
--- /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/solaris/proc_auxv_multiple.stderr.exp b/none/tests/solaris/proc_auxv_multiple.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/none/tests/solaris/proc_auxv_multiple.stderr.exp
diff --git a/none/tests/solaris/proc_auxv_multiple.stdout.exp b/none/tests/solaris/proc_auxv_multiple.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..d8dbdb7be
--- /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 000000000..da4109f66
--- /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 000000000..139597f9c
--- /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 000000000..734f6c69c
--- /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 000000000..88fdc8cd9
--- /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 000000000..af589c4a8
--- /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 000000000..391e60c39
--- /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 000000000..50cafcb6d
--- /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 000000000..9b6bdc2ec
--- /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 000000000..bde3ea3c1
--- /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 000000000..05d2cc671
--- /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 000000000..c3e8d14e7
--- /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 000000000..9b6bdc2ec
--- /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 000000000..0f20af196
--- /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 000000000..e90792047
--- /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 000000000..e48b27886
--- /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 000000000..078e14214
--- /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 000000000..139597f9c
--- /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 000000000..e84330511
--- /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 000000000..e8c1e29dc
--- /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 000000000..9ed4aeb71
--- /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/solaris/sigresend.stderr.exp b/none/tests/solaris/sigresend.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..a49633f3f
--- /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 000000000..6df009448
--- /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 000000000..0ebbfbb8b
--- /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 000000000..dd5e59515
--- /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 000000000..3b9ffd49b
--- /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 000000000..837624562
--- /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/solaris/stack_prot.stderr.exp b/none/tests/solaris/stack_prot.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/none/tests/solaris/stack_prot.stderr.exp
diff --git a/none/tests/solaris/stack_prot.stdout.exp b/none/tests/solaris/stack_prot.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..3a3a92054
--- /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 000000000..4899a1cce
--- /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/solaris/threads_exitall.stderr.exp b/none/tests/solaris/threads_exitall.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/none/tests/solaris/threads_exitall.stderr.exp
diff --git a/none/tests/solaris/threads_exitall.stdout.exp b/none/tests/solaris/threads_exitall.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..a7330710a
--- /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 9d9b0fffa..ffc735e13 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 086ff4365..e779ce62f 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 000000000..616ce05e1
--- /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 000000000..d3a6ad516
--- /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 000000000..1b6537e0c
--- /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 000000000..a11fd45d1
--- /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 000000000..ef2d52efd
--- /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 000000000..7ef22e9a4
--- /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 000000000..baae6896a
--- /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 000000000..3da92a2e3
--- /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 000000000..7ef22e9a4
--- /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 000000000..f25f0d42b
--- /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 000000000..587754a13
--- /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 4fa0fac2f..2c8669359 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 c0144230c..e567c4783 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 e69398ce8..000000000
--- 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 c3678bbf5..9b17ae010 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 0f8cb2d8c..b7619c9a8 100644
--- a/none/tests/x86-linux/seg_override.c
+++ b/none/tests/x86-linux/seg_override.c
@@ -34,6 +34,7 @@ typedef struct _LDT_ENTRY {
} HighWord;
} LDT_ENTRY;
+#if 0
inline static void *wine_ldt_get_base( const LDT_ENTRY *ent )
{
return (void *)(ent->BaseLow |
@@ -46,7 +47,7 @@ inline static unsigned int wine_ldt_get_limit( const LDT_ENTRY *ent )
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 000000000..ee69b2353
--- /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 000000000..7f2d3a93b
--- /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 000000000..407f7acb4
--- /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 000000000..9ef2a8d31
--- /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/x86-solaris/coredump_single_thread.stdout.exp b/none/tests/x86-solaris/coredump_single_thread.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..77604a0ab
--- /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 000000000..c500478f3
--- /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 000000000..2d8c88318
--- /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 000000000..d42da8ade
--- /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 000000000..7d8706a49
--- /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/x86-solaris/coredump_single_thread_sse.stdout.exp b/none/tests/x86-solaris/coredump_single_thread_sse.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..efc880aa9
--- /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 000000000..3cc5413da
--- /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 000000000..0ae9313a9
--- /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 000000000..75040a05e
--- /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/x86-solaris/syscalls.stderr.exp b/none/tests/x86-solaris/syscalls.stderr.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/none/tests/x86-solaris/syscalls.stderr.exp
diff --git a/none/tests/x86-solaris/syscalls.stdout.exp b/none/tests/x86-solaris/syscalls.stdout.exp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/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 000000000..16769d0d1
--- /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 e2465f794..2b35cd905 100644
--- a/none/tests/x86/Makefile.am
+++ b/none/tests/x86/Makefile.am
@@ -1,17 +1,28 @@
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
+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
-if BUILD_SSSE3_TESTS
- INSN_TESTS += insn_ssse3
+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,
@@ -22,7 +33,8 @@ endif
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 @@ EXTRA_DIST = \
$(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 @@ check_PROGRAMS = \
lahf \
looper \
movx \
- pushpopseg \
sbbmisc \
shift_ndep \
smc1 \
@@ -105,11 +119,22 @@ endif
if BUILD_LZCNT_TESTS
check_PROGRAMS += lzcnt32
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
-if BUILD_MOVBE_TESTS
- check_PROGRAMS += movbe
+endif
+endif
+if !SOLARIS_SUN_STUDIO_AS
+# Sun Studio assembler fails to assemble pushw %fs, popw %fs
+ check_PROGRAMS += pushpopseg
endif
diff --git a/none/tests/x86/badseg.stdout.exp-solaris b/none/tests/x86/badseg.stdout.exp-solaris
new file mode 100644
index 000000000..fd45cc7d4
--- /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 b367c0259..ebe57ac5a 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 @@ int main ( void )
/* 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 @@ int main ( void )
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 fd6722196..c02cc3652 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 6d1dfbcd4..70040ce28 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 000000000..b4ddfc9b1
--- /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 341b15a41..4b5efc5bf 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 8babe729d..af2d281c0 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 6ae6a7432..b87071987 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 42a9f2a82..622c4b0d4 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 d4f49536b..8821462f9 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 @@ void randBlock ( Block* b )
\
__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 38d110811..8b014cb74 100644
--- a/none/tests/x86/x86locked.c
+++ b/none/tests/x86/x86locked.c
@@ -14,6 +14,18 @@ typedef unsigned short UShort;
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 @@ void do_bt_G_E_tests ( void )
/* 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 @@ void do_bt_G_E_tests ( void )
/* 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 @@ int main ( void )
// 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 e5145cc0c..826a1b5b4 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 20150852c..ab504e937 100644
--- a/perf/Makefile.am
+++ b/perf/Makefile.am
@@ -33,7 +33,5 @@ fbench_CFLAGS = $(AM_CFLAGS) -O2
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 8e12d7bff..ae31cbb17 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 2fdcb4c3a..ea5440f80 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 e4a42c989..d7de3a18f 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 e4ca37f32..3b487c13f 100644
--- a/perf/tinycc.c
+++ b/perf/tinycc.c
@@ -3080,7 +3080,7 @@ enum tcc_token {
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 @@ static const char tcc_keywords[] =
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 @@ int gv(int rc)
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 @@ void vstore(void)
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 @@ static void subst_asm_operand(CString *add_str,
}
}
-/* 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 @@ static int64_t getclock_us(void)
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 5c482efe2..7a80cb0af 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 d4e54492d..005b6795a 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 @@ static inline void my_exit ( int x )
//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 @@ static inline void my_exit ( int x )
# 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 @@ static inline void my_exit ( int x )
#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 @@ static inline void my_exit ( int x )
//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 @@ static inline void my_exit ( int x )
//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 @@ static inline void my_exit ( int x )
STRNLEN(libsystemZucZddylib, strnlen)
# endif
+#elif defined(VGO_solaris)
+ STRNLEN(VG_Z_LIBC_SONAME, strnlen)
+
#endif
@@ -432,9 +466,14 @@ static inline void my_exit ( int x )
#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 @@ static inline void my_exit ( int x )
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 @@ static inline void my_exit ( int x )
#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 @@ static inline void my_exit ( int x )
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 @@ static inline void my_exit ( int x )
#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 @@ static inline void my_exit ( int x )
#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 @@ static inline void my_exit ( int x )
#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 @@ static inline void my_exit ( int x )
//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 @@ static inline void my_exit ( int x )
#elif defined(VGO_darwin)
//STRCASECMP_L(VG_Z_LIBC_SONAME, strcasecmp_l)
+#elif defined(VGO_solaris)
+
#endif
@@ -739,6 +811,8 @@ static inline void my_exit ( int x )
//STRNCASECMP_L(VG_Z_LIBC_SONAME, strncasecmp_l)
//STRNCASECMP_L(VG_Z_DYLD, strncasecmp_l)
+#elif defined(VGO_solaris)
+
#endif
@@ -778,10 +852,14 @@ static inline void my_exit ( int x )
#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 @@ static inline void my_exit ( int x )
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 @@ static inline void my_exit ( int x )
//MEMRCHR(VG_Z_LIBC_SONAME, memrchr)
//MEMRCHR(VG_Z_DYLD, memrchr)
+#elif defined(VGO_solaris)
+
#endif
@@ -953,6 +1038,10 @@ static inline void my_exit ( int x )
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 @@ static inline void my_exit ( int x )
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 @@ static inline void my_exit ( int x )
//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 @@ static inline void my_exit ( int x )
//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 @@ static inline void my_exit ( int x )
#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 @@ static inline void my_exit ( int x )
# 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 @@ static inline void my_exit ( int x )
//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 @@ static inline void my_exit ( int x )
VALGRIND_PRINTF_BACKTRACE( \
"*** memmove_chk: buffer overflow detected ***: " \
"program terminated\n"); \
- my_exit(127); \
+ my_exit(1); \
/*NOTREACHED*/ \
return NULL; \
}
@@ -1226,6 +1338,8 @@ static inline void my_exit ( int x )
#elif defined(VGO_darwin)
+#elif defined(VGO_solaris)
+
#endif
@@ -1252,6 +1366,8 @@ static inline void my_exit ( int x )
#elif defined(VGO_darwin)
+#elif defined(VGO_solaris)
+
#endif
@@ -1278,6 +1394,8 @@ static inline void my_exit ( int x )
#elif defined(VGO_darwin)
+#elif defined(VGO_solaris)
+
#endif
@@ -1302,7 +1420,7 @@ static inline void my_exit ( int x )
VALGRIND_PRINTF_BACKTRACE( \
"*** strcpy_chk: buffer overflow detected ***: " \
"program terminated\n"); \
- my_exit(127); \
+ my_exit(1); \
/*NOTREACHED*/ \
return NULL; \
}
@@ -1312,6 +1430,8 @@ static inline void my_exit ( int x )
#elif defined(VGO_darwin)
+#elif defined(VGO_solaris)
+
#endif
@@ -1335,7 +1455,7 @@ static inline void my_exit ( int x )
VALGRIND_PRINTF_BACKTRACE( \
"*** stpcpy_chk: buffer overflow detected ***: " \
"program terminated\n"); \
- my_exit(127); \
+ my_exit(1); \
/*NOTREACHED*/ \
return NULL; \
}
@@ -1345,6 +1465,8 @@ static inline void my_exit ( int x )
#elif defined(VGO_darwin)
+#elif defined(VGO_solaris)
+
#endif
@@ -1391,6 +1513,8 @@ static inline void my_exit ( int x )
#elif defined(VGO_darwin)
//GLIBC25_MEMPCPY(VG_Z_LIBC_SONAME, mempcpy)
+#elif defined(VGO_solaris)
+
#endif
@@ -1431,7 +1555,7 @@ static inline void my_exit ( int x )
VALGRIND_PRINTF_BACKTRACE( \
"*** memcpy_chk: buffer overflow detected ***: " \
"program terminated\n"); \
- my_exit(127); \
+ my_exit(1); \
/*NOTREACHED*/ \
return NULL; \
}
@@ -1441,6 +1565,8 @@ static inline void my_exit ( int x )
#elif defined(VGO_darwin)
+#elif defined(VGO_solaris)
+
#endif
@@ -1490,6 +1616,9 @@ static inline void my_exit ( int x )
#elif defined(VGO_darwin)
+#elif defined(VGO_solaris)
+ STRSTR(VG_Z_LIBC_SONAME, strstr)
+
#endif
@@ -1532,6 +1661,9 @@ static inline void my_exit ( int x )
#elif defined(VGO_darwin)
+#elif defined(VGO_solaris)
+ STRPBRK(VG_Z_LIBC_SONAME, strpbrk)
+
#endif
@@ -1575,6 +1707,9 @@ static inline void my_exit ( int x )
#elif defined(VGO_darwin)
+#elif defined(VGO_solaris)
+ STRCSPN(VG_Z_LIBC_SONAME, strcspn)
+
#endif
@@ -1619,6 +1754,9 @@ static inline void my_exit ( int x )
#elif defined(VGO_darwin)
+#elif defined(VGO_solaris)
+ STRSPN(VG_Z_LIBC_SONAME, strspn)
+
#endif
@@ -1672,6 +1810,9 @@ static inline void my_exit ( int x )
#elif defined(VGO_darwin)
+#elif defined(VGO_solaris)
+ STRCASESTR(VG_Z_LIBC_SONAME, strcasestr)
+
#endif
@@ -1698,6 +1839,9 @@ static inline void my_exit ( int x )
#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 000000000..6e663798e
--- /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 000000000..78396c423
--- /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 000000000..d06415c9d
--- /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 000000000..a5c8fc09c
--- /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 000000000..da2abc385
--- /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 000000000..60109369a
--- /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 000000000..2c68508f5
--- /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 b01cfb7f5..9c0cc3a05 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 @@ check_PROGRAMS = \
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 @@ else
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 81a12ec67..d83f0e550 100644
--- a/tests/arch_test.c
+++ b/tests/arch_test.c
@@ -39,10 +39,12 @@ char* all_archs[] = {
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 d9bc273f9..000000000
--- 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 3c5338674..47491b259 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 @@ my %dirs_to_ignore = (
"perf" => 1,
"tests" => 1,
"gdbserver_tests" => 1,
- "mpi" => 1
+ "mpi" => 1,
+ "solaris" => 1
);
my %tool_export_header = (
@@ -143,8 +148,8 @@ sub process_dir {
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 @@ sub check_tool_file {
}
}
+#---------------------------------------------------------------------
+# 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 @@ sub process_file {
} 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 b8ec37f31..000000000
--- 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 8b991e510..000000000
--- 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 000000000..49d7856d5
--- /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 12e5f68ec..000000000
--- 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 dd30ef100..9a508b0bc 100755
--- a/tests/filter_libc
+++ b/tests/filter_libc
@@ -9,11 +9,9 @@ while (<>)
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 @@ while (<>)
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 c24cd5ea2..472cd8fb4 100755
--- a/tests/filter_stderr_basic
+++ b/tests/filter_stderr_basic
@@ -12,8 +12,9 @@ dir=`dirname $0`
# 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 @@ sed "/warning: line info addresses out of order/d" |
# 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 0179b387c..146790e3c 100644
--- a/tests/malloc.h
+++ b/tests/malloc.h
@@ -16,12 +16,44 @@ 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);
+ 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 000000000..efcf526e8
--- /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 b755e3070..d3c5a69d0 100644
--- a/tests/os_test.c
+++ b/tests/os_test.c
@@ -23,6 +23,7 @@ typedef int Bool;
char* all_OSes[] = {
"linux",
"darwin",
+ "solaris",
NULL
};
@@ -62,6 +63,9 @@ static Bool go(char* OS, char *min_version)
#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 43275c8b3..965392157 100644
--- a/tests/platform_test
+++ b/tests/platform_test
@@ -15,6 +15,7 @@ all_platforms="$all_platforms x86-linux amd64-linux ppc32-linux ppc64-linux"
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 c8e1d2b71..a441f424c 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 $prereq; # prerequisite test to satisfy before running test
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 @@ sub read_vgtest_file($)
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 @@ sub read_vgtest_file($)
$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 @@ sub do_one_test($$)
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 @@ sub do_one_test($$)
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 @@ sub do_one_test($$)
# 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 {